μ•Œκ³ λ¦¬μ¦˜

[μ½”λ“œνŠΈλ¦¬ μ±Œλ¦°μ§€] 8μ£Όμ°¨ (10/25-10/30), dp

mingzoo 2023. 10. 30. 18:26

 

μ½”λ“œνŠΈλ¦¬ μ±Œλ¦°μ§€ λ§ˆμ§€λ§‰μ£Όλ₯Ό κ°€νŒŒλ₯Έ μƒμŠΉκ³‘μ„ μœΌλ‘œ λ§ˆλ¬΄λ¦¬ν•˜κ²Œ λ˜μ–΄μ„œ λ„ˆλ¬΄ 기뢄이 μ’‹λ‹€^.^

 

λ§ˆμ§€λ§‰μœΌλ‘œ ν‘Ό λ¬Έμ œκ°€ μ €μ €λ²ˆμ£Όμ— λͺ» ν‘Ό 문제 μœ ν˜•μ΄μ–΄μ„œ 살짝 λ–¨λ¦¬λŠ” 마음으둜 ν’€μ—ˆλŠ”λ°, μ €λ²ˆμ— λͺ» ν’€μ—ˆλ˜ 원인을 찾은 것 κ°™μ•„μ„œ ν’€λ©΄μ„œλ„ 기뢄이 μ’‹μ•˜λ‹€.

 

둜직의 μˆœμ„œλ₯Ό λ°”κΏ”μ„œ ν’€λ©΄μ„œ 일뢀 ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€μ—μ„œ ν‹€λ¦¬κ²Œ λ‚˜μ˜€κ²Œ 됐던 것 κ°™λ‹€.

κ·Έλž˜μ„œ λ‘œμ§μ„ λ‹€μ‹œ λ°”κΏ”λ³΄λ‹ˆ 이번 λ¬Έμ œκ°€ ν•΄κ²°λ˜λŠ” 것을 λ³Ό 수 μžˆμ—ˆλ‹€.

 

μ—­μ‹œ μ €λ²ˆμ£Όμ˜ ν›„ν‡΄λŠ” λ‘λ°œμ „μ§„μ„ μœ„ν•œ λ°œλ‹μ›€μ΄μ—ˆλ‚˜..?호호

 

 

 

 

였늘 평가λ₯Ό ν•˜κ³  λ‚˜λ‹ˆ dp에 λŒ€ν•œ ν•™μŠ΅μ΄ ν•„μš”ν•˜λ‹€λŠ” μ½”λ©˜νŠΈκ°€ λ‚˜μ˜€κ²Œ 됐닀.

dp도 항상 μ½”ν…Œμ—μ„œ ν•„μˆ˜ 문제둜 λ‚˜μ˜€λŠ” μœ ν˜•μ΄μ—ˆλŠ”λ° 이번 κΈ°νšŒμ— 곡뢀할 수 μžˆμ–΄μ„œ λ„ˆλ¬΄ μ’‹μ•˜λ‹€.

κ·Έλž˜μ„œ λ°”λ‘œ ν˜Έλ‹€λ‹₯ κ°œλ… 곡뢀λ₯Ό μ‹œμž‘ν–ˆλ‹€.

넀카라 μ½”ν…ŒλŠ” 쉽지 μ•Šκ΅¬λ‚˜..

DP (Dynamic Programming)

큰 λ¬Έμ œμ— λŒ€ν•œ 닡을 μ–»κΈ° μœ„ν•΄ λ™μΌν•œ λ¬Έμ œμ΄μ§€λ§Œ 크기가 더 μž‘μ€ λ¬Έμ œλ“€μ„ λ¨Όμ € ν•΄κ²°ν•œ λ’€, κ·Έ 결과듀을 μ΄μš©ν•΄ 큰 문제λ₯Ό 비ꡐ적 κ°„λ‹¨ν•˜κ²Œ ν•΄κ²°ν•˜λŠ” 기법

 

일단, DPλŠ” 점화식을 μ°Ύμ•„λ‚΄λŠ” 것이 μ€‘μš”ν•˜λ‹€

 

ν’€μ—ˆλ˜ 문제

#계단 였λ₯΄κΈ°

이 λ¬Έμ œλŠ” dpλ₯Ό μ΄ν•΄ν•˜κΈ°μ— λ”± 쒋은 문제인 것 κ°™μ•„μ„œ κ³ λ₯΄κ²Œ λ˜μ—ˆλ‹€.

nμΈ΅ λ†’μ΄μ˜ 계단을 였λ₯΄λ €κ³  ν•©λ‹ˆλ‹€. ν•œ λ²ˆμ— μ •ν™•νžˆ 2계단 ν˜Ήμ€ 3계단 λ‹¨μœ„λ‘œλ§Œ 올라갈 수 μžˆλ‹€κ³  ν–ˆμ„ λ•Œ, nμΈ΅ λ†’μ΄μ˜ 계단에 μ˜¬λΌκ°€κΈ° μœ„ν•œ μ„œλ‘œ λ‹€λ₯Έ λ°©λ²•μ˜ 수λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•΄λ³΄μ„Έμš”. 단, 항상 2계단 ν˜Ήμ€ 3계단 λ‹¨μœ„λ‘œλ§Œ 올라갈 수 μžˆκΈ°μ— nμΈ΅κΉŒμ§€ μ •ν™•νžˆ 1계단이 남은 μƒν™©μ—μ„œλŠ” n측으둜 올라갈 수 μžˆλŠ” 방법이 μ „ν˜€ μ—†μŒμ— μœ μ˜ν•©λ‹ˆλ‹€.

ν•΄λ‹Ή 번째 측에 λ„λ‹¬ν•˜κΈ° μœ„ν•΄μ„œλŠ”

1) 2계단씩 였λ₯΄κ±°λ‚˜

2) 3계단씩 였λ₯΄κΈ°

λ”°λΌμ„œ 점화식은 dp[i] = dp[i - 2] + dp[i - 3]

dp[i-2]λŠ” 2계단 μ „, dp[i-3]은 3계단 μ „μœΌλ‘œ μƒκ°ν•˜λ©΄ λœλ‹€.

이 μ ν™”μ‹μœΌλ‘œ κ³„μ‚°ν•˜λ©΄ nμΈ΅κΉŒμ§€ μ˜¬λΌκ°€λŠ” 방법을 μ•Œ 수 μžˆλ‹€.

이 점화식을 μ΄μš©ν•΄μ„œ μž‘μ„±ν•œ μ½”λ“œκ°€ μ•„λž˜ μ½”λ“œμ΄λ‹€.

MAX_N = 1000
MOD = 10007

# λ³€μˆ˜ μ„ μ–Έ 및 μž…λ ₯:
n = int(input())
dp = [0] * (MAX_N + 1)

# 초기 쑰건 μ„€μ •
dp[0] = 1
dp[1] = 0
dp[2] = 1
dp[3] = 1

# 점화식에 따라 dpκ°’ μ±„μš°κΈ°
# dp[i] = dp[i - 2] + dp[i - 3]
for i in range(4, n + 1):
    dp[i] = (dp[i - 2] + dp[i - 3]) % MOD

print(dp[n])

 

 

μ±Œλ¦°μ§€ ν›„κΈ°

개발자 μ€€λΉ„λ₯Ό ν•œλ‹€λ©΄ 놓을 수 μ—†λŠ” μ½”ν…Œλ₯Ό μ½”λ“œνŠΈλ¦¬ μ±Œλ¦°μ§€λ‘œ ν•¨κ»˜ ν•˜λ©΄μ„œ λ„ˆλ¬΄ μ’‹μ•˜λ‹€.

κ·Έ 전에도 곡뢀λ₯Ό μ•ˆν•œ 건 μ•„λ‹ˆμ§€λ§Œ, λ­”κ°€ μ œλŒ€λ‘œ ν•˜κ³ μžˆλŠ”μ§€ 뭐뢀터 κ³΅λΆ€ν•΄μ•Όν•˜λŠ”μ§€ 고민이 λ§Žμ•˜λŠ”λ° μ½”λ“œνŠΈλ¦¬λŠ” 그런 고민을 ν•˜λ˜ λ‚˜μ—κ²Œ 길을 λ‚΄μ£Όκ³  κ³΅λΆ€ν•˜λ©΄ ν•  수 μžˆλ‹€λŠ” μžμ‹ κ°μ„ μ£Όμ—ˆλ‹€. 

μ±Œλ¦°μ§€ 덕뢄에 μ’€ 더 μŠ΅κ΄€ν™”ν•  수 μžˆμ—ˆκ³ , λ¬΄μž‘μ • ν•˜κΈ° μ‹«μ–΄ν–ˆλ˜ μ½”ν…Œ 문제 ν’€κΈ°λ₯Ό 재밌게 ν•  수 있게 됐닀

μ±Œλ¦°μ§€κ°€ λλ‚˜κ³ λ„ μ•žμœΌλ‘œ 계속 μ•Œκ³ λ¦¬μ¦˜ κ³΅λΆ€ν•˜λ©΄μ„œ 문제λ₯Ό κΎΈμ€€νžˆ ν’€μ–΄μ•Όκ² λ‹€

넀카라 μ½”ν…ŒλŠ” 쉽지 μ•Šκ΅¬λ‚˜..

이 ν…ŒμŠ€νŠΈ κ²°κ³Όκ°€ λ§ν•˜κΈΈ μ΄λ ‡κ²Œ κ³΅λΆ€ν•˜λ©΄ μ €λ•Œλ˜λ©΄ μ½”ν…Œ λ§ˆμŠ€ν„°κ°€ λ˜μ–΄μžˆκ² λ‹€κ³  ν•˜λ‹ˆκΉŒ~ μ—΄μ‹¬νžˆ κΎΈμ€€νžˆ! 곡뢀해야겠닀!

728x90