Skip to content

Commit ce6ed5f

Browse files
committed
add W15
1 parent fe2fc65 commit ce6ed5f

File tree

4 files changed

+100
-0
lines changed

4 files changed

+100
-0
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
'''
2+
BOJ ##2281. λ°μŠ€λ…ΈνŠΈ (κ³¨λ“œ4)
3+
https://www.acmicpc.net/problem/2281
4+
μœ ν˜•: Dynamic Programming
5+
'''
6+
7+
import sys
8+
input = sys.stdin.readline
9+
10+
n, m = map(int, input().split())
11+
12+
names = [int(input()) for _ in range(n)]
13+
dp = [[-1]*(m+1) for _ in range(n)]
14+
dp[0][names[0]] = 0
15+
16+
for r in range(n-1):
17+
for c in range(1, m+1):
18+
if dp[r][c] != -1:
19+
#뒀에 λΆ™μ΄λŠ” 경우의 수
20+
if c+1+names[r+1] <= m:
21+
dp[r+1][c+names[r+1]+1] = dp[r][c]
22+
#λ‹€μŒμ€„μ— μ“°λŠ” 경우의 수
23+
if dp[r+1][names[r+1]] != -1:
24+
dp[r+1][names[r+1]] = min(dp[r+1][names[r+1]], dp[r][c] + (m-c)**2)
25+
else:
26+
dp[r+1][names[r+1]] = dp[r][c] + (m-c)**2
27+
28+
answer = 1000000000
29+
for i in range(1, m+1):
30+
if dp[n-1][i] != -1:
31+
answer = min(answer, dp[n-1][i])
32+
print(answer)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
## πŸš€3μ›” 2μ£Όμ°¨ (3/10) μŠ€ν„°λ”” 발제 주제: Dynamic programming
2+
> 발제자: 김홍주
3+
4+
> 주제: Dynamic programming
5+
### πŸ—‚οΈ μŠ€ν„°λ”” 자료
6+
- PDF: [λ°”λ‘œκ°€κΈ°
7+
](./Study_BOJ_2294.pdf)
8+
9+
10+
### πŸ“– 문제
11+
- [λ°±μ€€ #2342. Dance Dance Revolution](https://www.acmicpc.net/problem/2342): Dynamic Programming / κ³¨λ“œ3
12+
- μ •λ‹΅ μ½”λ“œ: [Study_BOJ_2342_DanceDanceRevolution.py](./Study_BOJ_2342_DanceDanceRevolution)
13+
14+
### πŸ’» 과제
15+
- [λ°±μ€€ #2281. λ°μŠ€λ…ΈνŠΈ](https://www.acmicpc.net/problem/2281): Dynamic Programming / κ³¨λ“œ4
16+
- μ •λ‹΅ μ½”λ“œ: [Assignment_BOJ_2281_λ°μŠ€λ…ΈνŠΈ.py](./Assignment_BOJ_2281_λ°μŠ€λ…ΈνŠΈ.py)
495 KB
Binary file not shown.
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
'''
2+
BOJ #2342. Dance Dance Revolution (κ³¨λ“œ3)
3+
https://www.acmicpc.net/problem/2342
4+
μœ ν˜•: Dynamic Programing
5+
'''
6+
import sys
7+
input = sys.stdin.readline
8+
INF = int(1e9)
9+
commands = list(map(int,input().split()))[:-1]
10+
11+
# 이전 μ§€μ μ—μ„œ ν˜„μž¬ μ§€μ μœΌλ‘œ μ΄λ™ν• λ•Œ λ“œλŠ” power κ°’ λ°˜ν™˜
12+
def getPower(before_foot , current_foot , preview_power) :
13+
add_power = 0
14+
if before_foot == current_foot :
15+
add_power= 1
16+
elif before_foot == 0 and current_foot !=0 :
17+
add_power= 2
18+
elif abs(before_foot-current_foot)==2 : # 인접 지점 λˆ„λ₯Ό 경우
19+
add_power=4
20+
else : # λ°˜λŒ€νŽΈ 지점 λˆ„λ₯Ό 경우
21+
add_power= 3
22+
return preview_power + add_power
23+
24+
25+
#1.dp μ΄ˆκΈ°ν™” (ν˜„μž¬ L , R μœ„μΉ˜ , λˆ„μ  power)
26+
# 3차원 : dp[level][r][l] = λˆ„μ  power
27+
dp = [[[INF for k in range(5)] for i in range(5)] for _ in range(len(commands)+1)]
28+
dp[0][0][0] = 0
29+
30+
# # #2. 반볡문으둜 dp 점화식(memorization) κ΅¬ν˜„
31+
cur_r ,cur_l = 0 ,0
32+
# 각 κ²Œμž„ λ‹¨κ³„λ³„λ‘œ μ—…λ°μ΄νŠΈ
33+
for level in range(1,len(commands)+1):
34+
target = commands[level-1] # ν˜„ λ‹¨κ³„μ—μ„œ 이동할 자리
35+
36+
for r in range(5) :
37+
for l in range(5) :
38+
# 이전 μ—…λ°μ΄νŠΈ 된 r, l 의 경우의 μˆ˜μ— ν•œμ •(μ΅œμ ν™”)
39+
if dp[level-1][r][l] !=INF :
40+
cur_p = dp[level-1][r][l]
41+
# (1) 였λ₯Έ 발만 μ΄λ™ν•˜λŠ” 경우
42+
dp[level][target][l]= min(dp[level][target][l],getPower(r,target,cur_p))
43+
#(2) μ™Ό 발만 μ΄λ™ν•˜λŠ” 경우
44+
dp[level][r][target]= min(dp[level][r][target],getPower(l,target,cur_p))
45+
46+
# 3. μ΅œμ’… λ‹¨κ³„μ—μ„œ μ΅œμ†Œ 힘 좜λ ₯
47+
result = INF
48+
for i in range(5):
49+
for k in range(5):
50+
result = min(result, dp[-1][i][k])
51+
52+
print(result)

0 commit comments

Comments
Β (0)