문제 설명 보기
>>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
바이너리 트리를 탐색하며 가장 큰 숫자의 branch를 찾는 문제 같지만 그런식으로 순회하면 무조건 time-out이 되도록 설계된 문제다.
자식 Node로 탐색하는 방법 중 가장 가중치가 크도록 탐색하는 방법은 두개의 부모 노드 중 가중치가 더 큰 노드를 통해 탐색하는 법이므로, 그를 통해 문제를 해결했다.
가중치가 있는 길찾기를 한다고 생각하면 편하다.
import java.util.Arrays;
import java.util.Collections;
import java.util.stream.Collectors;
class Solution {
public int solution(int[][] triangle) {
if(triangle.length == 1) return triangle[0][0];
for(int row = 1; row < triangle.length; row++){
for(int col = 0; col < triangle[row].length; col++){
int left = 0;
int right = 0;
if(col != 0){
left = triangle[row-1][col-1];
}
if(col != triangle[row].length-1){
right = triangle[row-1][col];
}
triangle[row][col] += Math.max(left, right);
}
}
return Collections.max(Arrays.stream(triangle[triangle.length-1]).boxed().collect(Collectors.toList()));
}
}
728x90
반응형
'Algorithms > Programmers' 카테고리의 다른 글
[프로그래머스] 순위 / JAVA (0) | 2021.03.20 |
---|---|
[프로그래머스] 단어 변환 / JAVA (0) | 2021.03.15 |
[프로그래머스] 조이스틱 / JAVA (0) | 2021.03.10 |
[프로그래머스] 가장 먼 노드 / JAVA (0) | 2021.03.06 |
[프로그래머스] 입국심사 / JAVA (1) | 2021.03.05 |