![[프로그래머스/JAVA] 43105번 정수 삼각형 (DP)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUZH16%2FbtsKWIMOgkK%2F2nCdKp127WXKXBanw1Bce1%2Fimg.png)

[프로그래머스/JAVA] 43105번 정수 삼각형 (DP)Coding Test/Programmers2024. 11. 25. 16:05
문제
더보기

문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/43105
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명

위와 같은 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우를 찾아보려고 합니다.
아래 칸으로 이동할 때는 대각선 방향으로 한 칸 오른쪽 또는 왼쪽으로만 이동 가능합니다.
예를 들어 3에서는 그 아래칸의 8 또는 1로만 이동이 가능합니다.
삼각형의 정보가 담긴 배열 triangle이 매개변수로 주어질 때, 거쳐간 숫자의 최댓값을 return 하도록 solution 함수를 완성하세요.
제한 사항
- 삼각형의 높이는 1 이상 500 이하입니다.
- 삼각형을 이루고 있는 숫자는 0 이상 9,999 이하의 정수입니다.
입출력 예시
triangle | result |
[[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] | 30 |
문제 풀이
접근 방법
- 경로의 합이 가장 큰 경우를 찾아라
- 이동은 대각선 방향으로 좌, 우로 이동 할 수 있다.
- 밑에서 부터 가장 큰 값들을 더해서 위로 올라가면 가장 위에 있는 값은 최대합 경로이다.

코드
public class P_43105 {
private static int solution(int[][] triangle) {
// 제일 아래 있는 원소부터 큰값을 위에 더해서 저장
for (int i=triangle.length-1; i>0; i--) {
for (int j=0; j<i; j++) {
// 자식 두개 값의 최대값을 부모 한칸에 더하기
triangle[i-1][j] += Math.max(triangle[i][j], triangle[i][j+1]);
}
}
// 가장 위에 있는 값이 최대값 경로
return triangle[0][0];
}
}
반응형
'Coding Test > Programmers' 카테고리의 다른 글
[프로그래머스/JAVA] 42892번 길 찾기 게임 (이진트리) (0) | 2024.11.27 |
---|---|
[프로그래머스/JAVA] 42628번 이중우선순위큐 (힙) (0) | 2024.11.25 |
[프로그래머스/JAVA] 72413번 합승 택시 요금 (다익스트라) (1) | 2024.11.20 |
[프로그래머스/JAVA] 81305번 시험장 나누기 (DFS, 이진탐색) (2) | 2024.11.13 |
[프로그래머스/JAVA] 258712번 가장 많이 받은 선물 (0) | 2024.11.07 |

@dundun213 :: dundun213 님의 블로그
dundun213 님의 블로그 입니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!