알고리즘 공부/DP

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

kdhoooon 2021. 5. 22. 15:42

문제


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

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

 

 

제한사항

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

 

 

 

 

 

풀이


이 문제를 풀려면 아래의 규칙을 이해해야 한다.

 

이차원 배열을 삼각형으로 그림으로 표현한 것이다.

삼각형을 더하는 3가지 경우가 존재한다.

  • 0번 행은 윗 열의 0번행만 더 할 수 있다.
  • 마지막 행은 윗 열의 마지막행만 더 할 수 있다.
  • 그외의 것들은 윗 열의 j, j -1 번 인덱스 중 더 큰값과 더한다.

이렇게 3가지 경우를 고려해서 모두 더해준 뒤 , 마지막열의 가장 큰 값을 출력하면 되는 문제다.

 

<전체코드>

class Solution {
    public int solution(int[][] triangle) {
        int answer = 0;
        
        for(int i = 1 ; i < triangle.length ; i++){
            for(int j = 0 ; j < i + 1 ; j++){
                if(j == 0){
                    triangle[i][j] += triangle[i-1][j];
                }                
                else if( j == i){
                    triangle[i][j] += triangle[i-1][j-1];
                }
                else{
                    triangle[i][j] += Math.max(triangle[i-1][j], triangle[i-1][j-1]);
                }
            }
        }
        
        for(int i = 0 ; i < triangle[triangle.length-1].length ; i++){
            answer = Math.max(answer, triangle[triangle.length -1][i]);
        }
        
        return answer;
    }
}

'알고리즘 공부 > DP' 카테고리의 다른 글

[프로그래머스] 거스름돈  (0) 2021.06.09
[프로그래머스] 등굣길  (0) 2021.05.23
[프로그래머스] N으로 표현  (0) 2021.05.17
백준 11438 ( LCA 2) - DP 풀이  (0) 2021.03.25
백준 10844 (쉬운 계단 수)  (0) 2021.01.31