๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/11727
๋ด๊ฐ ํผ ํ์ด
์ฐ์ ์ด์ 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])
}
์๊ฐ๋ณด๋ค ๊ธฐ์ด๋ฌธ์ ๋ฐ, ์๊ฐํ๊ธฐ๊ฐ ์ด๋ ค์ ๋ค. ์ง๊ธ๊น์ง ๋ชจ๋ ์ธํฐ๋ท์ ์ฐธ๊ณ ํ์ฌ ํผ ํ์ด์ด๊ธฐ ๋๋ฌธ์ ๋ณต์ต์ ๋ช ๋ฒ ๋ ๋ฐ๋ณตํด์ผ๊ฒ ๋ค.!! ๊ผฎ!!!