728x90
출처: https://www.acmicpc.net/problem/11066
소스코드
package baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Baek11066 {
static int tc;
static StringBuilder sb = new StringBuilder();
static int k; //파일의 크기
public static void main(String[] args) throws IOException {
//풀어야 할 문제...
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
tc = Integer.parseInt(br.readLine());
for (int t = 0; t < tc; t++) {
k = Integer.parseInt(br.readLine());
int[][] dp = new int[k + 1][k + 1]; //dp에 담길 값은 특정 chapter 부터 또다른 특정 chapter까지
int[] sum = new int[k + 1];
int[] chapters = new int[k + 1];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int n = 1; n <= k; n++) {
chapters[n] = Integer.parseInt(st.nextToken());
sum[n] = sum[n - 1] + chapters[n];
}
for (int i = 1; i < k; i++) {
for (int from = 1; from + i <= k; from++) {
int to = from + i;
dp[from][to] = Integer.MAX_VALUE;
for (int divide = from; divide < to; divide++) {
dp[from][to] = Math.min(dp[from][to], dp[from][divide] + dp[divide + 1][to] + sum[to] - sum[from - 1]);
}
}
}
sb.append(dp[1][k]).append("\n");
}
System.out.println(sb.toString());
}
}
느낀점 : 오랜시간을 할애하여 이해하게 되었다. 하지만 이해를 했다고 하여 코드로 녹여 내는 과정은 연습이 더 필요한 것 같다. Detail이 부족함을 느낀다.
'알고리즘' 카테고리의 다른 글
| 백준 1027 고층건물(Java) (0) | 2023.12.18 |
|---|---|
| 백준 2252 줄 세우기 (java) (2) | 2023.12.06 |
| 백준 1665번 가운데를 말해요 (java) (0) | 2023.12.04 |
| 프로그래머스(단어변환) -java (0) | 2023.12.02 |
| pccp 4번문제(Dfs & backtracking) -java (1) | 2023.12.02 |