정수삼각형 (43105) - 프로그래머스 [코테][알고리즘]
프로그래머스 programers 정수삼각형 (43105)문제의 풀이와 해설을 합니다.
[프로그래머스] 코딩테스트 연습 > 동적계획법(Dynamic Programming) > 정수 삼각형 (43105)
트리탐색의 후위순회를 예를 들어 설명하면
  1 (1+3 = 4)
2   3
탐색 순서는 2 -> 3 -> 1 됩니다.
해결방법
- 자식 노드 2 와 3중에 큰 값과 1을 더한 값을 저장합니다. 
즉 1의 두 자식 노드 중 큰 값과 자기 자신을 계속 적으로 더해 나가는 방법을 사용합니다. 
점화식으로 표현하면 아래와 같습니다.
    
부모합산 = 부모 + max(오른쪽자식, 왼쪽자식)
 - 재귀를 사용하여 해결한 코드
 
public int preOrder(부모노드){
    if (노드의 번호가 초과하면 ) return 0;
    if (합산값이 이미 있다면) return 합산[부모노드];
   
    return 합산[부모] = 부모 + max( preOrder(왼쪽자식),   preOrder(오른쪽자식))
}
소스코드
class Solution {
    private static int[][] nodes;
    private static int[][] nodesSum;
    public static int solution(int[][] triangle) {
        nodes = triangle;
        nodesSum = new int[triangle.length][triangle.length];
        return preOrder(0, 0);
    }
    private static int preOrder(int row, int col) {
        if (nodes.length == row) return 0;
        if (nodesSum[row][col] > 0) return nodesSum[row][col];
        return nodesSum[row][col] = nodes[row][col] + Math.max(preOrder(row + 1, col), preOrder(row + 1, col + 1));
    }
}