Algorithm/프로그래머스

프로그래머스_정수 삼각형(JAVA)

류진주 2021. 8. 4. 17:58

https://programmers.co.kr/learn/courses/30/lessons/43105?language=java 

 

코딩테스트 연습 - 정수 삼각형

[[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] 30

programmers.co.kr

문제 설명

위와 같은 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우를 찾아보려고 합니다. 아래 칸으로 이동할 때는 대각선 방향으로 한 칸 오른쪽 또는 왼쪽으로만 이동 가능합니다. 예를 들어 3에서는 그 아래칸의 8 또는 1로만 이동이 가능합니다.

삼각형의 정보가 담긴 배열 triangle이 매개변수로 주어질 때, 거쳐간 숫자의 최댓값을 return 하도록 solution 함수를 완성하세요.

제한사항

  • 삼각형의 높이는 1 이상 500 이하입니다.
  • 삼각형을 이루고 있는 숫자는 0 이상 9,999 이하의 정수입니다.

입출력 예

triangle result
[[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] 30

[문제 풀이]

삼각형의 바닥부터 위로 대각선 방향의 왼쪽 오른쪽에 존재하는 수 중 더 큰 수를 더해가며 삼각형의 꼭대기까지 올라가게하여 최종적으로 삼각형의 꼭대기, 즉, triangle[0][0]에 최댓값이 저장되도록 하였다.

 

입출력 예를 보면, 삼각형의 바닥에서 하나 위에 면 부터 값이 변경되기 시작한다.

[2, 7, 4, 4] -> [7(=2+5), 12(=7+5), 10(=4+6), 10(=4+6)]

[8, 1, 0] 은 방금 변경된 위의 배열을 이용하여 변경시킨다. -> [20(=8+12), 13(=1+12), 10(=0+10)]

[3, 8] -> [23(=3+20), 21(=8+13)]

[7] -> [30(=7+23)]

 

[코드]

class Solution {
    public int solution(int[][] triangle) {
        for(int i=triangle.length-2;i>=0;i--){
            for(int j=0;j<triangle[i].length;j++){
                triangle[i][j] = triangle[i+1][j]>triangle[i+1][j+1]?triangle[i][j]+triangle[i+1][j]:triangle[i][j]+triangle[i+1][j+1];
            }
        }
        
        return triangle[0][0];
    }
}