728x90
반응형
1. 오늘의 학습 문제
문제
https://school.programmers.co.kr/learn/courses/30/lessons/43105
문제 설명
위와 같은 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우를 찾아보려고 합니다. 아래 칸으로 이동할 때는 대각선 방향으로 한 칸 오른쪽 또는 왼쪽으로만 이동 가능합니다. 예를 들어 3에서는 그 아래칸의 8 또는 1로만 이동이 가능합니다.
삼각형의 정보가 담긴 배열 triangle이 매개변수로 주어질 때, 거쳐간 숫자의 최댓값을 return 하도록 solution 함수를 완성하세요.
제한사항- 삼각형의 높이는 1 이상 500 이하입니다.
- 삼각형을 이루고 있는 숫자는 0 이상 9,999 이하의 정수입니다.
[[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] | 30 |
코드
*틀린 코드
import java.util.*;
class Solution {
static int answer=-1;
static int[] level_max;
public int solution(int[][] triangle) {
level_max = new int[triangle.length]; //레벨별로 최대합 저장 메모라이제이션
Tri(triangle, 0, 0, 0);
return answer;
}
public void Tri(int[][] triangle, int i, int k, int now){
now+=triangle[i][k];
if(i==triangle.length-1){
answer = Math.max(answer, now);
level_max[i]=answer;
}
else if(now>level_max[i]){
level_max[i]=now;
Tri(triangle, i+1, k, now);
Tri(triangle, i+1, k+1, now);
}
}
}
메모이제이션을 사용하고자했는데, 틀렸다. 효율성도 실패.
재귀적 방법인데, 복잡도가 높다.
저장하는 것은, 레벨별 합의 최대인데, 이렇게 되면 중복되는 계산이 생긴다.
따라서 풀이를 찾아 보았다.
import java.util.*;
class Solution {
public int solution(int[][] triangle) {
int answer = 0;
int height = triangle.length; // 삼각형 높이
int[][] dp = new int[height][height]; // 합 기록할 배열
// 가장 왼쪽 단계는 미리 저장
dp[0][0] = triangle[0][0];
for(int i = 1; i < height; i++) {
dp[i][0] = dp[i-1][0] + triangle[i][0];
}
// 위에서부터 높이 하나씩 내려가면서 최대값 구하기
for(int i = 1; i < height; i++) {
for(int j = 1; j < triangle[i].length; j++) {
// 왼쪽 위에서 내려와 더했을 때, 오른쪽 위에서 내려와 더했을 때 중 최대값 저장
dp[i][j] = Math.max(dp[i-1][j-1] + triangle[i][j], dp[i-1][j] + triangle[i][j]);
}
}
// 삼각형의 바닥에서 가장 큰 값 구하기
for(int i = 0; i < height; i++) {
answer = Math.max(dp[height - 1][i], answer);
}
return answer;
}
}
2. 오늘의 회고
- 접근은 좋았는데, 아쉬웠다. DP 문제를 더 풀어보자
#99클럽 #코딩테스트 준비 #개발자 취업 #항해99 #TIL
728x90
반응형
'공부 > 2024 항해99코딩클럽' 카테고리의 다른 글
99클럽 3기 코테 스터디 23일차 TIL /[LeetCode] 502.IPO 자바 풀이 (0) | 2024.08.13 |
---|---|
99클럽 3기 코테 스터디 22일차 TIL /[LeetCode] Maximal Rectangle 자바 (0) | 2024.08.12 |
99클럽 3기 코테 스터디 20일차 TIL /[프로그래머스] 섬 연결하기 자바 풀이, 크루스칼 알고리즘, Union-Find 알고리즘 (1) | 2024.08.10 |
99클럽 3기 코테 스터디 19일차 TIL /[프로그래머스] 조이스틱 자바 풀이 그리디 문제 (0) | 2024.08.09 |
99클럽 3기 코테 스터디 18일차 TIL /[백준] 5547 일루미네이션 BFS 자바 (0) | 2024.08.08 |