Skip to content

Commit 9c2b6ed

Browse files
authored
[20250218] BOJ / 골드5 / 디저트 / 신동윤
1 parent fcd3216 commit 9c2b6ed

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
```java
2+
import java.util.*;
3+
import java.io.*;
4+
5+
// [BOJ] 17953_디저트
6+
public class Main {
7+
public static void main(String[] args) throws IOException {
8+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
9+
10+
StringTokenizer st = new StringTokenizer(br.readLine());
11+
int N = Integer.parseInt(st.nextToken());
12+
int M = Integer.parseInt(st.nextToken());
13+
14+
// point[i][j] = i번째 디저트를 j일째에 먹는 경우 만족감
15+
int[][] point = new int[M + 1][N + 1];
16+
for (int i = 1; i < M + 1; i++) {
17+
st = new StringTokenizer(br.readLine());
18+
for (int j = 1; j < N + 1; j++) {
19+
point[i][j] = Integer.parseInt(st.nextToken());
20+
}
21+
}
22+
23+
// 한 주기마다 얻을 수 있는 만족감의 최댓값을 출력한다.
24+
25+
// dp[day][dessert] = dessert를 day일에 먹는 경우 얻을 수 있는 만족감의 최대
26+
int[][] dp = new int[N + 1][M + 1];
27+
28+
for (int day = 1; day < N + 1; day++) {
29+
for (int dessert = 1; dessert < M + 1; dessert++) {
30+
if (day == 1) {
31+
dp[day][dessert] = point[dessert][day];
32+
continue;
33+
}
34+
for (int prev = 1; prev < M + 1; prev++) {
35+
if (prev == dessert) {
36+
// 전날에 같은 디저트를 먹은 경우
37+
dp[day][dessert] = Integer.max(dp[day][dessert],
38+
dp[day-1][dessert] + point[dessert][day]/2); // 만족감이 감소한다.
39+
} else {
40+
// 전날에 다른 디저트를 먹은 경우
41+
dp[day][dessert] = Integer.max(dp[day][dessert],
42+
dp[day-1][prev] + point[dessert][day]); // 만족감이 감소하지 않는다.
43+
}
44+
45+
}
46+
}
47+
}
48+
49+
int answer = 0;
50+
for (int dessert = 1; dessert < M+1; dessert++) {
51+
answer = Integer.max(answer, dp[N][dessert]);
52+
}
53+
System.out.println(answer);
54+
55+
br.close();
56+
}
57+
}
58+
59+
```

0 commit comments

Comments
 (0)