Skip to content

Commit c99671d

Browse files
committed
[BOJ] 자두 나무 / 골드 5 / 80분 힌트사용
https://www.acmicpc.net/problem/2240
1 parent b372219 commit c99671d

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from sys import stdin
2+
3+
T, W = map(int, stdin.readline().split())
4+
5+
6+
lst = [0]
7+
dp = [[0]*(W+1) for _ in range(T+1)]
8+
9+
# 입력 받기
10+
for _ in range(T):
11+
lst.append(int(stdin.readline()))
12+
13+
# DP 테이블 채우기
14+
for i in range(1, T+1):
15+
if lst[i] == 1:
16+
# 이동을 한 번도 안 했을 경우 (항상 1번 나무 아래 있음)
17+
dp[i][0] = dp[i-1][0] + 1 # 자두 먹으면 +1
18+
else:
19+
# 1번 나무 아래 있는데 2번 나무에서 자두 떨어지면 못 먹음
20+
dp[i][0] = dp[i-1][0]
21+
22+
# 이동 횟수 1회 이상부터
23+
for j in range(1, W+1):
24+
if lst[i] == 2 and j % 2 == 1:
25+
# 홀수번 이동했을 때는 2번 나무 아래 있음 → 2번 나무에서 자두 떨어지면 +1
26+
dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + 1
27+
elif lst[i] == 1 and j % 2 == 0:
28+
# 짝수번 이동했을 때는 1번 나무 아래 있음 → 1번 나무에서 자두 떨어지면 +1
29+
dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + 1
30+
else:
31+
# 자두 못 먹을 경우, 이동하거나 이동 안 하거나 둘 중 최대값만 가져오기
32+
dp[i][j] = max(dp[i-1][j-1], dp[i-1][j])
33+
34+
print(max(dp[-1]))

0 commit comments

Comments
 (0)