https://school.programmers.co.kr/learn/courses/30/lessons/43105
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
내가 푼 틀린 정답!
class Point {
int y, x;
public Point(int y, int x) {
super();
this.y = y;
this.x = x;
}
}
class Solution {
static int max;
public int solution(int[][] triangle) {
int n = triangle.length-1;
Point p = new Point(0, 0);
dp(triangle, p, triangle[0][0], n);
return max;
}
private void dp(int[][] triangle, Point p, int sum, int depth) {
if(depth == 0) {
max = Math.max(sum, max);
System.out.println("sum : " + sum);
return;
}
for(int i = 0; i < 2; i++) {
int dy = p.y+1;
int dx = p.x + i;
Point point = new Point(dy, dx);
dp(triangle, point, sum+triangle[dy][dx], depth-1);
}
}
}
- 이유는 재귀함수를 계속 반복하면서 시간을 초과하게 되는 것
즉, 계산은 한번씩만 하도록 계산한 값 중 가장 큰 값을 저장하여서 값을 도출해야 하는 것이다.
import java.util.*;
class Solution {
public int solution(int[][] triangle) {
int[][] hap = new int[triangle.length][triangle.length];
hap[0][0] = triangle[0][0];
for(int i = 1; i < triangle.length; i++) {
//맨 왼쪽
hap[i][0] = hap[i-1][0] + triangle[i][0];
//중간
for(int j = 1; j <= i; j++) {
hap[i][j] = Math.max(hap[i-1][j], hap[i-1][j-1]) + triangle[i][j];
}
//맨 오른쪽
hap[i][i] = hap[i-1][i-1] + triangle[i][i];
}
int [] ans = hap[triangle.length-1];
Arrays.sort(ans);
return ans[ans.length-1];
}
}
'코딩테스트 > programmers' 카테고리의 다른 글
[level2]마법의 엘리베이터 JAVA (0) | 2023.01.04 |
---|---|
[level3] 야근지수 JAVA (0) | 2022.11.24 |
[level2] 2018 KAKAO BLIND RECRUITMENT[3차] 압축 JAVA (0) | 2022.11.16 |
[level2] [1차] 뉴스 클러스터링 JAVA (0) | 2022.11.16 |
[level2] 주차 요금 계산 JAVA (0) | 2022.11.15 |