๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜

[์ฝ”๋“œํŠธ๋ฆฌ ์ฑŒ๋ฆฐ์ง€] 8์ฃผ์ฐจ (10/25-10/30), dp

by mingzoo 2023. 10. 30.

 

์ฝ”๋“œํŠธ๋ฆฌ ์ฑŒ๋ฆฐ์ง€ ๋งˆ์ง€๋ง‰์ฃผ๋ฅผ ๊ฐ€ํŒŒ๋ฅธ ์ƒ์Šน๊ณก์„ ์œผ๋กœ ๋งˆ๋ฌด๋ฆฌํ•˜๊ฒŒ ๋˜์–ด์„œ ๋„ˆ๋ฌด ๊ธฐ๋ถ„์ด ์ข‹๋‹ค^.^

 

๋งˆ์ง€๋ง‰์œผ๋กœ ํ‘ผ ๋ฌธ์ œ๊ฐ€ ์ €์ €๋ฒˆ์ฃผ์— ๋ชป ํ‘ผ ๋ฌธ์ œ ์œ ํ˜•์ด์–ด์„œ ์‚ด์ง ๋–จ๋ฆฌ๋Š” ๋งˆ์Œ์œผ๋กœ ํ’€์—ˆ๋Š”๋ฐ, ์ €๋ฒˆ์— ๋ชป ํ’€์—ˆ๋˜ ์›์ธ์„ ์ฐพ์€ ๊ฒƒ ๊ฐ™์•„์„œ ํ’€๋ฉด์„œ๋„ ๊ธฐ๋ถ„์ด ์ข‹์•˜๋‹ค.

 

๋กœ์ง์˜ ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ”์„œ ํ’€๋ฉด์„œ ์ผ๋ถ€ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์—์„œ ํ‹€๋ฆฌ๊ฒŒ ๋‚˜์˜ค๊ฒŒ ๋๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

๊ทธ๋ž˜์„œ ๋กœ์ง์„ ๋‹ค์‹œ ๋ฐ”๊ฟ”๋ณด๋‹ˆ ์ด๋ฒˆ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

์—ญ์‹œ ์ €๋ฒˆ์ฃผ์˜ ํ›„ํ‡ด๋Š” ๋‘๋ฐœ์ „์ง„์„ ์œ„ํ•œ ๋ฐœ๋‹์›€์ด์—ˆ๋‚˜..?ํ˜ธํ˜ธ

 

 

 

 

์˜ค๋Š˜ ํ‰๊ฐ€๋ฅผ ํ•˜๊ณ  ๋‚˜๋‹ˆ 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