코테/코드트리
[코드트리/INTERMEDIATE LOW] 정수 사각형 최소 합 (JAVA)
imname1am
2024. 1. 15. 22:32
반응형
📖 문제
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
💡 풀이 방식
• DP
1. 2차원 배열 값을 입력받는다.
2. DP배열을 초기화한다.
- 맨 윗 줄 : 오른쪽에서 온 값을 누적해 더한 값으로 변경한다.
- 맨 오른쪽 줄 : 위쪽에서 내려온 값을 누적해 더한 값으로 변경한다.
3. 초기화한 값을 활용해 dp 배열을 채운다.
- 위쪽과 오른쪽에서 온 값 中 더 작은 값을 선택하고 현재 칸의 값에 누적해 더한다.
4. 맨 왼쪽 아래에 있는 값을 출력한다.
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
import java.util.*;
import java.io.*;
public class Main {
static int N;
static int[][] dp;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
N = Integer.parseInt(br.readLine());
dp = new int[N][N];
for(int i = 0 ; i < N ; i++) {
st = new StringTokenizer(br.readLine(), " ");
for(int j = 0 ; j < N ; j++) {
dp[i][j] = Integer.parseInt(st.nextToken());
}
}
// 위쪽 줄 채우기
for(int i = N - 2 ; i >= 0 ; i--) {
dp[0][i] += dp[0][i + 1];
}
// 오른쪽 줄 채우기
for(int i = 1 ; i < N ; i++) {
dp[i][N - 1] += dp[i - 1][N - 1];
}
// DP 배열 채우기
for(int i = 1 ; i < N ; i++) {
for(int j = N - 2 ; j >= 0 ; j--) {
dp[i][j] += Math.min(dp[i - 1][j], dp[i][j + 1]); // 위쪽과 오른쪽 중 작은 값 선택해
}
}
System.out.println(dp[N - 1][0]);
}
}
|
cs |
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
반응형