티스토리 뷰

Algorithm/Solution

[프로그래머스] - 정수 삼각형

기내식은수박바 2020. 3. 16. 22:42
반응형

문제 설명

  • 위와 같은 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우를 찾아보려고 합니다.
    • 아래 칸으로 이동할 때는 대각선 방향으로 한 칸 오른쪽 또는 왼쪽으로만 이동 가능합니다.
    • 예를 들어 3에서는 그 아래칸의 8 또는 1로만 이동이 가능합니다.
  • 삼각형의 정보가 담긴 배열 triangle이 매개변수로 주어질 때, 거쳐간 숫자의 최댓값을 return 하도록 solution 함수를 완성하세요.

 

제한 조건

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

 

입출력 예

 

솔루션

  • DP (Dynamic Programming) 을 이용한 문제이다.
  • 그림을 통해 보자.

  • 빨간색 부분은 대소 비교할 필요 없이 위에서 더한 값들을 현재 지점 값과 그대로 더하면 된다.
    • 빨간색 왼쪽 부분은 y좌표가 0.
    • 빨간색 오른쪽 부분은 x좌표와 y좌표가 동일.
  • 파란색 부분왼쪽에서 내려오는 값오른쪽에서 내려오는 값큰 값에 현재 지점 값을 더해야 되기 때문에 값 비교가 필요하다.

 

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static int solution(int[][] triangle) {
    int max = 0;
 
    for (int i = 1; i < triangle.length; i++) {
        for (int j = 0; j <= i; j++) {
            if (j == 0// 빨간색 왼쪽 부분 
                triangle[i][j] += triangle[i - 1][j];
            else if (i == j) // 빨간색 오른쪽 부분
                triangle[i][j] += triangle[i - 1][j - 1];
            else // 파란색 삼각형 부분
                triangle[i][j] += Math.max(triangle[i - 1][j - 1], triangle[i - 1][j]);
 
            if (i == triangle.length - 1)
                max = Math.max(max, triangle[i][j]);
        }
    }
 
    return max;
}
cs

 

결과

반응형

'Algorithm > Solution' 카테고리의 다른 글

[백준 9095] - 1, 2, 3 더하기  (0) 2020.03.17
[백준 1003] - 피보나치 함수  (0) 2020.03.17
[백준 6497] - 전력난  (0) 2020.03.16
[백준 1647] - 도시 분할 계획  (0) 2020.03.13
[백준 10774] - 저지  (0) 2020.03.12
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함