Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Algorithm/Baekjoon

[๋ฐฑ์ค€] (Swift) 11727๋ฒˆ - 2xn ํƒ€์ผ๋ง2 (์Šค์œ„ํ”„ํŠธ, dp, ๋™์ ๊ณ„ํš๋ฒ• ์ž์„ธํ•œ ํ’€์ด)

๊ฐ์ž ๐Ÿฅ” 2022. 3. 5. 16:02
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ ๋งํฌ

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

 

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

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

www.acmicpc.net

 

๋‚ด๊ฐ€ ํ‘ผ ํ’€์ด

์šฐ์„  ์ด์ „ 2xnํƒ€์ผ๋ง ๋ฌธ์ œ์—์„œ๋Š” ๊ทœ์น™์„ ๋ฐœ๊ฒฌํ•˜๊ณ  ๊ทธ๋ƒฅ ํ”ผ๋ณด๋‚˜์น˜ ๋ฐฉ์‹์œผ๋กœ ํ’€์—ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ๊ทธ ๋ฌธ์ œ์˜ ์—ฐ์žฅ์„ ์ด๊ธฐ๋Š” ํ•˜์ง€๋งŒ, ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด ๊ทœ์น™์œผ๋กœ๋Š” ํ’€ ์ˆ˜๊ฐ€ ์—†์—ˆ๋‹ค. ์ •ํ™•ํ•˜๊ฒŒ ์™œ ๊ทธ๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋Š”์ง€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ–ˆ๋‹ค..

์šฐ์„  ํ’€์ด์— ์•ž์„œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์›๋ฆฌ์— ๋Œ€ํ•ด์„œ ์ดํ•ดํ•ด๋ณด์ž.

[1, 2, 3, 4] ์˜ ๋ฐฐ์—ด์ด ์žˆ์„ ๋•Œ , ์ด ์ˆซ์ž๋“ค๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆœ์—ด์„ ์ž‘์„ฑํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • 1 2 3 4
  • 1 2 4 3 
  • 1 3 2 4
  • 1 3 4 2
  • 1 4 2 3
  • 1 4 3 2
  • 2....3. .... 4...  

์ด๋ ‡๊ฒŒ 24๊ฐ€์ง€๊ฐ€ ๋‚˜์—ด๋  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿผ ์ด๋•Œ, ๋งจ ์•ž์ด 1์ธ ์ˆœ์—ด์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•ด๋ณด๋ฉด, 1 ๋นผ๊ณ  ๋‚˜๋จธ์ง€ 2, 3, 4๋กœ ์ค„์„ ์„ธ์šฐ๋Š” ๊ฒฝ์šฐ์˜์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ 3! , ์ฆ‰ ๋‹ต 6์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด์ฒ˜๋Ÿผ 'ํ•œ๊ฐ€์ง€๋ฅผ ๊ณ ์ •ํ•˜๊ณ ' ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฐพ์œผ๋ฉด (n-1)! ๊ฐ€ ๋œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด, 2๊ฐœ์˜ ์ˆ˜๋ฅผ ๊ณ ์ •ํ•˜๊ณ  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ฉด ์–ด๋–ค๊ฐ€? ๋ฐ”๋กœ (n-2)!๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿผ, ์œ„์˜ ๊ฐœ๋…์„ ํƒ€์ผ์—๋‹ค๊ฐ€ ๋Œ€์ž…ํ•ด๋ณด๋ฉด, ๋งจ ๋์— ํ•˜๋‚˜์˜ 2x1 ์งœ๋ฆฌ ํƒ€์ผ์„ ๊ณ ์ •ํ•ด๋‘” ๊ฒฝ์šฐ์˜์ˆ˜์™€, 2x2๋กœ ์ด๋ฃจ์–ด์ง„ ํƒ€์ผ์„ ๊ณ ์ •ํ•ด๋‘” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋”ํ•˜๋ฉด ๋  ๊ฒƒ์ด๋‹ค. ์ด๊ฑธ ๋„์‹ํ™” ํ•˜๋ฉด, dp[i-1] ๊ณผ dp[i-2] ์— value๋กœ ๋„ฃ์„ ํŽ™ํ† ๋ฆฌ์–ผ ๊ฐ’์„ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆผ์œผ๋กœ ์‚ดํŽด๋ณด์ž.

์ด๋ ‡๊ฒŒ ๋œ๋‹ค. ๋งจ ๋์ชฝ์„ ๊ณ ์ •ํ•ด๋‘๊ณ , ๊ฐฏ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ฉด ๊ฐ๊ฐ n-1 ๊ณผ n-2๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฐ’์„ ๊ตฌํ•˜๊ฒŒ ๋œ๋‹ค. ๋‘๋ฒˆ์งธ์— ๊ทธ๋ ค์ง„ ๋ถ€๋ถ„์„ ๋ณด๋ฉด, n-1๊ณผ ๊ฒน์น˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฝ์šฐ์˜ ์ˆ˜์—์„œ ๋นผ์ค€๋‹ค๊ณ  ํ•˜์˜€๋Š”๋ฐ, ์ƒ๊ธด ๋ชจ์–‘์ด ๋งจ์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ตญ ๊ฐฏ์ˆ˜๋ฅผ ๋™์‹œ์— ์„ผ๋‹ค๋ฉด, ๊ฒน์น˜๊ฒŒ ๋ ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์œ„ ๊ทธ๋ฆผ ๋„ค ๊ฐœ์ค‘ ์„ธ ๊ฐ€์ง€๋งŒ ๋”ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์„ ์„ ํƒํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ๋‹ค. 

์†Œ์Šค์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

let n = Int(readLine()!)!
var dp = [Int](repeating: 0, count: n+1)

if n == 1 {
    print(1)
} else if n == 2 {
    print(3)
} else {
    dp[1] = 1
    dp[2] = 3
    
    for i in 3..<n+1 {
        dp[i] = (dp[i-1] + 2*dp[i-2]) % 10007
    }
    print(dp[n])
}

 

์ƒ๊ฐ๋ณด๋‹ค ๊ธฐ์ดˆ๋ฌธ์  ๋ฐ, ์ƒ๊ฐํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์› ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ๋ชจ๋‘ ์ธํ„ฐ๋„ท์„ ์ฐธ๊ณ ํ•˜์—ฌ ํ‘ผ ํ’€์ด์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์Šต์„ ๋ช‡ ๋ฒˆ ๋” ๋ฐ˜๋ณตํ•ด์•ผ๊ฒ ๋‹ค.!! ๊ผฎ!!!

๋ฐ˜์‘ํ˜•