Skip to content

Commit 3dbd450

Browse files
authored
0411
1 parent 14ebc71 commit 3dbd450

2 files changed

Lines changed: 100 additions & 0 deletions

File tree

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package algo_ex;
2+
3+
import java.io.BufferedReader;
4+
import java.io.IOException;
5+
import java.io.InputStreamReader;
6+
import java.util.StringTokenizer;
7+
8+
public class Main_11066_파일_합치기_김태윤 {
9+
10+
public static void main(String[] args) throws IOException {
11+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
12+
StringTokenizer st = null;
13+
14+
int T = Integer.parseInt(br.readLine());
15+
16+
for (int t = 1; t <= T; t++) {
17+
int K = Integer.parseInt(br.readLine());
18+
19+
int[][] dp = new int[K + 1][K + 1];
20+
st = new StringTokenizer(br.readLine());
21+
for (int i = 1; i <= K; i++) {
22+
dp[i][i] = Integer.parseInt(st.nextToken());
23+
}
24+
25+
int[] sum = new int[K+1];
26+
27+
sum[1] = dp[1][1];
28+
for(int i = 2; i<=K; i++) {
29+
sum[i] = sum[i-1] + dp[i][i];
30+
}
31+
32+
33+
// 1칸씩, 2칸씩,, -> 1부터 시작, 2부터 시작 -> 가르기는 12 면 1<=k<2
34+
35+
for (int i = 1; i < K; i++) { // 사이 간격, [1][2] 이면 1
36+
for (int j = 1; j <= K - i; j++) { // 시작점, [3(j)][4] 가 마지막이도록
37+
for (int k = j; k < i + j; k++) { //중간지
38+
System.out.println(i+" "+j+" "+k+"///"+"["+j+","+(j+i)+"]");
39+
if (dp[j][j + i] == 0)
40+
dp[j][j + i] = dp[j][k] + dp[k + 1][j + i];
41+
dp[j][j + i] = Math.min(dp[j][j + i], dp[j][k] + dp[k + 1][j + i]);
42+
}
43+
if(i==1)
44+
continue;
45+
System.out.println(dp[j][j+i]);
46+
dp[j][j+i] += (sum[j+i] - sum[j-1]);
47+
System.out.println(dp[j][j+i]);
48+
System.out.println();
49+
}
50+
}
51+
52+
System.out.println(dp[1][K]);
53+
}
54+
55+
}
56+
57+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package algo_ex;
2+
3+
public class Main_프로그래머스_도둑질_김태윤 {
4+
5+
static class Solution {
6+
public int solution(int[] money) {
7+
int answer = 0;
8+
9+
if(money.length == 3)
10+
return Math.max(money[0], Math.max(money[1], money[2]));
11+
12+
//첫 집 턴다
13+
int[] dp = new int[money.length];
14+
dp[0] = money[0];
15+
dp[1] = money[1];
16+
dp[2] = money[0]+money[2];
17+
for(int i = 3; i<money.length-1; i++) {
18+
dp[i] = Math.max(dp[i-3] + money[i], dp[i-2] + money[i]);
19+
}
20+
answer = Math.max(dp[money.length-2], dp[money.length-3]);
21+
22+
//첫 집 안 턴다
23+
dp = new int[money.length];
24+
dp[1] = money[1];
25+
dp[2] = money[2];
26+
27+
for(int i = 3; i<money.length; i++) {
28+
dp[i] = Math.max(dp[i-3] + money[i], dp[i-2] + money[i]);
29+
}
30+
answer = Math.max(answer, Math.max(dp[money.length-1], dp[money.length-2]));
31+
32+
return answer;
33+
}
34+
}
35+
36+
public static void main(String[] args) {
37+
Solution sss = new Solution();
38+
39+
int[] money = { 1, 2, 3, 1 };
40+
System.out.println(sss.solution(money));
41+
}
42+
43+
}

0 commit comments

Comments
 (0)