๋ฐฑ์ค€ - 2 x n ํƒ€์ผ๋ง

2020. 9. 7. 22:49ใ†์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

๋ฐฑ์ค€ -  2 x n ํƒ€์ผ๋ง

 

www.acmicpc.net/problem/11726

 

11726๋ฒˆ: 2×n ํƒ€์ผ๋ง

2×n ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์„ 1×2, 2×1 ํƒ€์ผ๋กœ ์ฑ„์šฐ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์•„๋ž˜ ๊ทธ๋ฆผ์€ 2×5 ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์„ ์ฑ„์šด ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์˜ ์˜ˆ์ด๋‹ค.

www.acmicpc.net

 

์ˆ˜ํ•™์„ ์ž˜ ๋ชปํ•˜๋Š” ํ•„์ž๋Š” ์œ„ ๋ฌธ์ œ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ํ’€์ดํ•˜๋Š”๋ฐ ์กฐ๊ธˆ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋‹ค.

 

๋ฐ”๋กœ ํ’€์ด๋ฅผ ํ•ด๋ณด์ž. 

์ „ํ˜•์ ์ธ DP๋ฌธ์ œ์ด๋‹ค. (DP : ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ)

 

๋ฌธ์ œ์˜ ์ž…๋ ฅ๊ฐ’์ด 1000๊นŒ์ง€ ์ด๋ฏ€๋กœ dp๋ฐฐ์—ด์„ 1001๊ฐœ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

 

n=1์ผ ๋•Œ 1 x 2 ์˜ ํƒ€์ผ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉ --> 1๊ฐœ dp[1] = 1

 

n=2์ผ ๋•Œ 1 x 2์˜ ํƒ€์ผ ๋‘๊ฐœ, 2 x 1์˜ ํƒ€์ผ ๋‘๊ฐœ --> 2๊ฐœ dp[2] = 2

 

n=3์ผ ๋•Œ ๋งจ ์™ผ์ชฝ์— 1 x 2 ๊ฐ€ ์žˆ์„ ๋•Œ ๊ฒฝ์šฐ --> ์˜†์— 2 x 2 ๊ณต๊ฐ„์ด ๋‚จ๊ณ  ์ด ๊ณต๊ฐ„์€ n = 2์ผ ๋•Œ ๊ฐ’ + ๋งจ ์™ผ์ชฝ์— 2 x 1์˜ ํƒ€์ผ ๋‘๊ฐœ๊ฐ€ ์žˆ์„ ๋•Œ ๊ฒฝ์šฐ --> ์˜†์— 1 x 2 ๊ณต๊ฐ„์ด ๋‚จ๊ณ  ์ด ๊ณต๊ฐ„์€ n = 1 ์ผ ๋•Œ ๊ฐ’

 

๊ฒฐ๊ตญ d[3] = d[1] + d[2]๋ผ๋Š” ์ ํ™”์‹์ด ๋„์ถœ๋œ๋‹ค.

 

์ด๋Š” ์ฝ”๋“œ๋กœ 'd[n] = d[n-2] + d[n-1]'๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ณ  ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด๊ณผ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋ฅผ ๋„ํ˜•์ ์œผ๋กœ ์ ‘๊ทผํ•ด๋ณด๋ฉด, ๋งจ ์˜ค๋ฅธ์ชฝ 1 x 2๊ฐ€ ์žˆ์„ ๋•Œ ๋‚˜๋จธ์ง€ i-1๊ณต๊ฐ„ + ๋งจ ์˜ค๋ฅธ์ชฝ 2 x 1 ๊ฐ€ ๋‘ ๊ฐœ ์žˆ์„ ๋•Œ ๋‚˜๋จธ์ง€ i-2๊ณต๊ฐ„์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. i-3๋ถ€๋ถ„์€ ํ™•์ธํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ์ด๋ฏธ ์„ธ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์šฐ๋ฆฌ๋Š” 2 x 1, 1 x 2ํฌ๊ธฐ์˜ ํƒ€์ผ๋ฐ–์— ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋ฏ€๋กœ ์ƒˆ๋กœ ์ถ”๊ฐ€๋˜๋Š” ๋ถ€๋ถ„๋งŒ ์ด ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ๋ฅผ ์‹ ๊ฒฝ์จ์ค€๋‹ค๋ฉด ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๋‹ค ์„ธ๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

 

10007๋กœ ๋‚˜๋ˆˆ ์ด์œ ๋Š” ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์•„๋งˆ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์ปค์กŒ์„ ๋•Œ๋ฅผ ๋Œ€๋น„ํ•ด์„œ ์จ๋†“์€๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์˜๋ฌธ์ด ์žˆ๋‹ค. ์ˆ˜ํ–‰์‹œ๊ฐ„์ด ์™œ์ด๋ ‡๊ฒŒ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ฑธ๊นŒ. ๋งˆ์ง€๋ง‰ ์ถœ๋ ฅํ•  ๋•Œ 10007๋กœ ๋‚˜๋ˆ„์–ด๋ณด์•„๋„ ๋˜‘๊ฐ™๋‹ค. ํ .. ์•„๋ฌดํŠผ ์ •๋‹ต์ฒ˜๋ฆฌ๋Š” ๋ฐ›๋Š” ์ฝ”๋“œ์ด๋‹ค.

 

์†Œ์Šค ์ฝ”๋“œ๋กœ ํ™•์ธํ•˜์ž.

n = int(input())

d = [0]*1001
d[1] = 1
d[2] = 2

for i in range(3, n+1):
  d[i] = (d[n-1] + d[n-2])%10007
  

print(d[n])