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