알고리즘 공부/문제 풀이

[프로그래머스] 동적 계획법 - 정수 삼각형

valid_ming 2020. 8. 23. 23:33

이 문제는 지난 컴퓨터 알고리즘 수업시간에 설명을 들은 적이 있다..

그거와는 별개로 기억나지 않는 풀이법..

 

그래서 동적계획법을 이용하여 어떻게 해결할까를 고민하니

거꾸로 올라가자라는 생각이 떠올랐고

맨 아래줄을 제외한 아랫줄에서 부터 새로운 정수 삼각형을 만들어

그 삼각형에서 만들 수 있는 가장 큰 수를 저장하게 하였다.

 

    static int solution(int[][] triangle) {
        int answer = 0;
        
        for(int i=triangle.length-2;i>=0;i--) {	// 맨 아랫줄의 바로 윗줄서부터
        	for(int j=0;j<triangle[i].length;j++) {
        		triangle[i][j] += Math.max(triangle[i+1][j], triangle[i+1][j+1]);
        	}
        }
        
        return triangle[0][0];
    }

 

이 문제에서 위에서 아래로 내려가는 풀이법은 완전 탐색일 것이다.

이 경우 효율성 테스트에서 정답을 못 맞힌다..