Algorithm/Programmers
[프로그래머스] 정수 삼각형
1일1코딩
2020. 7. 29. 21:37
https://programmers.co.kr/learn/courses/30/lessons/43105
코딩테스트 연습 - 정수 삼각형
[[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] 30
programmers.co.kr
풀이 방법 (DP)
삼각형의 꼭대기에서 가장 최하단까지 내려오면서 각 구역의 숫자를 더해 가장 큰 값이 되는 것을 구하는 문제이다.
각 층별로 현재 위치의 최댓값을 정하면서 내려왔다.
가장 좌측과 우측은 내려 올 수 있는 길이 한가지여서 예외처리를 하였으며, 아닌 경우 올 수 있는 길은 2가지 경우이다.
2가지경우 중 큰 값에 현재 값을 더하였다.
소스코드(Javascript)
더보기
function solution(triangle) {
var answer = 0;
var dp = new Array(triangle.length);
dp[0] = new Array(1);
dp[0][0] = triangle[0][0];
answer = dp[0][0];
for (var i = 1; i < triangle.length; i++) {
dp[i] = new Array(i + 1);
for (var j = 0; j < triangle[i].length; j++) {
if (j == 0) {
dp[i][j] = dp[i - 1][0] + triangle[i][j];
}
else if (j == triangle[i].length - 1) {
dp[i][j] = dp[i - 1][triangle[i - 1].length - 1] + triangle[i][j];
}
else {
dp[i][j] = dp[i - 1][j - 1] > dp[i - 1][j] ? dp[i - 1][j - 1] + triangle[i][j] : dp[i - 1][j] + triangle[i][j];
}
if (answer < dp[i][j]) {
answer = dp[i][j];
}
}
}
return answer;
}