Skip to content

Commit e8e21ef

Browse files
authored
Merge pull request #150 from AlgorithmWithGod/03do-new30
[20250219] BOJ / 골드5 / 디저트 / 신동윤
2 parents 34632bf + 9b46e5d commit e8e21ef

File tree

1 file changed

+58
-0
lines changed

1 file changed

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

0 commit comments

Comments
 (0)