๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[๋ฐฑ์ค€] 11727๋ฒˆ 2xn ํƒ€์ผ๋ง 2 (Python)

mallin 2024. 10. 11. 16:53

https://www.acmicpc.net/problem/11727

๐Ÿ“Œ ๋ฌธ์ œ

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

์•„๋ž˜ ๊ทธ๋ฆผ์€ 2×17 ์ง์‚ฌ๊ฐํ˜•์„ ์ฑ„์šด ํ•œ๊ฐ€์ง€ ์˜ˆ์ด๋‹ค.

 

๐Ÿ“Œ ์ž…๋ ฅ

์ฒซ์งธ ์ค„์— n์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ n ≤ 1,000)

 

๐Ÿ“Œ ์ถœ๋ ฅ

 

์ฒซ์งธ ์ค„์— 2×n ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์„ ์ฑ„์šฐ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ 10,007๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 


๐Ÿ“Œ ํ’€์ด ๋ฐฉ์‹ 

์ด 2x1, 1x2, 2x2 ์„ธ ๊ฐ€์ง€์˜ ํƒ€์ผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š”. 

 

 

 

n = 1 ์ผ ๋•Œ๋Š” 1x2 ํƒ€์ผ ๋กœ ์ด 1๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๊ณ 

n = 2 ์ผ ๋•Œ๋Š” 1x2 2๊ฐœ / 2x1 2๊ฐœ / 2x2 1๊ฐœ ๋กœ ์ด 3๊ฐ€์ง€์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

n ์ด 2์ผ ๋•Œ๊นŒ์ง€๋Š” ๊ทธ๋ƒฅ ๋จธ๋ฆฌ๋กœ ๊ณ„์‚ฐํ•ด์„œ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š”. 

๊ทธ๋ ‡๋‹ค๋ฉด n = 3 ์ผ ๋•Œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š” ?

 

์ด๋ ‡๊ฒŒ ์ด ๋‹ค์„ฏ๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. 

ํ˜น์‹œ ํ•ด๋‹น ๊ฒฝ์šฐ๋ฅผ ๋ณด๊ณ  ๊ทœ์น™์„ ๊ตฌํ•  ์ˆ˜ ์žˆ์„๊นŒ์š” ? (ํžŒํŠธ๋Š” ๋ธ”๋ก ์ƒ‰์— ์žˆ์Šต๋‹ˆ๋‹ค) 

n = 1 ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜์— 2x1 2๊ฐœ๋ž‘ 2x2 1๊ฐœ๊ฐ€ ๋ง๋ถ™์—ฌ์กŒ๊ณ , 

n = 2 ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜์— 1x2 ํƒ€์ผ ํ•˜๋‚˜๊ฐ€ ๋ถ™์—ฌ์ ธ์„œ ์ด 5๊ฐ€์ง€์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋‚˜์˜จ ๊ฑธ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

์•„ํ•˜ ๊ทธ๋Ÿฌ๋ฉด n ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ ค๋ฉด 

n - 2 ์˜ ๋ธ”๋ก์—๋Š” 2x1 2๊ฐœ๋ž‘ 2x2 1๊ฐœ ๋กœ ์ด 2๊ฐœ๋ฅผ ๋ถ™์ด๋ฉด ๋˜๊ณ , 

n - 1 ์˜ ๋ธ”๋ก์—๋Š” 1x2 ๋กœ ์ด 1๊ฐœ๋ฅผ ๋ถ™์ด๋ฉด ๋˜๊ฒ ๋„ค์š”. 

 

ํ•ด๋‹น ์‹์„ ๋‚˜ํƒ€๋‚ด๋ณด๋ฉด ์ด๋ ‡์Šต๋‹ˆ๋‹ค. 

n - 2 ์˜ ๊ฐœ์ˆ˜ * 2 + n - 1 ์˜ ๊ฐœ์ˆ˜ 

 

ํ•ด๋‹น ์‹์„ ์ด์šฉํ•ด์„œ n = 4 ๋ฅผ ๊ตฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

๊ทธ๋Ÿผ ์ด์ œ ๋ณด์ด์‹œ๋‚˜์š” ?

 

์ฃผํ™ฉ์ƒ‰ ๋ธ”๋ก์ด n-2 ์—์„œ ๊ฐ€์ ธ์˜จ ๋ธ”๋ก์ด๊ณ , 

์ดˆ๋ก์ƒ‰ ๋ธ”๋ก์ด n-1 ์—์„œ ๊ฐ€์ ธ์˜จ ๋ธ”๋ก์ž…๋‹ˆ๋‹ค. 

 

์ฃผํ™ฉ์ƒ‰ ๋ธ”๋ก๋“ค ๋’ค์—๋Š” 2x1 2๊ฐœ๋ž‘ 2x2 1๊ฐœ ๊ฐ€ ๋ถ™์—ˆ๊ณ ,

์ดˆ๋ก์ƒ‰ ๋ธ”๋ก๋“ค ๋’ค์—๋Š” 1x2 ๊ฐ€ ๋ถ™์–ด์„œ n = 4 ์ผ ๋•Œ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ์ด 11๊ฐœ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

์ด๋Ÿฐ ๋ฐฉ์‹์„ ๊ณ„์† ๋ฐ˜๋ณตํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค

10,007๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•ด์•ผํ•˜๋Š” ๊ฑฐ ์žŠ์ง€ ๋งˆ์‹œ๊ตฌ์š” !!

 

๐Ÿ“Œ ์ฝ”๋“œ

n = int(input())
dp = [0 for _ in range(max(n, 2))]

dp[0] = 1
dp[1] = 3

for i in range(2, n):
    dp[i] = dp[i-1] + dp[i-2] * 2

print(dp[n-1] % 10007)