์ค๋์ ๋ฌธ์
- ๋ฐฑ์ค ํผ๋ณด๋์น ๋น์ค๋ฌด๋ฆฌํ ์์ด
- https://www.acmicpc.net/problem/14495
์ค๋์ ํ์ต ํค์๋
- ์ฌ๊ทํจ์์ ๋ฌธ์ ์ , ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ (DP) ๋ฐฉ์, ํผ๋ณด๋์น ์์ด
์๋ชป๋ ์ ๊ทผ
1. ๋จ์ํ๊ฒ ์ฌ๊ท ํจ์๋ก f(n) = f(n-1) + f(n-3) ๋ก ๋์ ํด๋ณด์์ผ๋ ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ํจ์ ํธ์ถ์ด ๋ง์์ง ๊ฒฝ์ฐ์๋ ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
- ํจ์ ํธ์ถ ์คํ์ด ์์ด๊ธฐ ๋๋ฌธ์ ์ ํ์ด ๋๋๊ฒ ์๋๊น ์ถ๋ค.
2. ์ค๊ฐ์ ๊ณ์ฐํ ๊ฒฐ๊ณผ๋ฅผ Array ์ ์ ์ฅํ๊ณ ๋น ๋ฅด๊ฒ ๋ฐํํ๋๋ก ํ์ง๋ง, ํจ์ ํธ์ถ์ด ๋ง์ ๋ฐํ์ ์๋ฌ๋ก ์คํจํ๋ค.
3. 1 <= n <= 116 ์ผ๋ก ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ 117๋ก ์ค์ ํ์ด์ผ ํ๋๋ฐ 116์ผ๋ก ํด์ index error ๊ฐ ๋ฐ์ํ๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
- ์ฌ๊ท ํจ์๊ฐ ์๋ ๋ฐ๋ณต๋ฌธ์ ์ด์ฉํด ํผ๋ณด๋์น ๋น์ค๋ฌด๋ฆฌํ ์์ด์ ๊ฐ์ ๊ณ์ฐํ๋ค.
- ๋ฐ๋ณต๋ฌธ์ ๋๋ฉด์ ํด๋น ์ธ๋ฑ์ค์ ๊ฐ์ ๊ณ์ฐํ๊ณ , ๋ฐฐ์ด์ ๊ฐ์ ๋ฏธ๋ฆฌ ์ ์ฅํด๋๋ค. (๋งค๋ฒ ๊ณ์ฐํ๋ฉด ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์)
import Foundation
func fibonachi(_ n: Int) -> Int {
var fibonachiArray = Array(repeating: 0, count: 117)
if n == 1 || n == 2 || n == 3 {
return 1
} else {
for i in 1...3 {
fibonachiArray[i] = 1
}
for i in 4...n {
fibonachiArray[i] = fibonachiArray[i-1] + fibonachiArray[i-3]
}
}
return fibonachiArray[n]
}
if let input = readLine(), let n = Int(input) {
let result = fibonachi(n)
print(result)
}
์ค๋์ ํ๊ณ
1. ์ค๋๋ง์ ํ๋ readLine() ๋ ํท๊ฐ๋ ค์ ํค๋งธ์๋ค.
2. ๋์ ๊ณํ๋ฒ (Dynamic Programmin) ์ ํฐ ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ก ๋๋์ด ํธ๋ ๋ฌธ์ ๋ก ์ด๋ค ๊ฒฝ์ฐ์ ์ ์ฉ๋๋์ง ์ ๋ฆฌ๊ฐ ํ์ํด๋ณด์ธ๋ค.
- ๋ถ๋ถ ๋ฌธ์ ์ ์ค๋ณต : ๊ฐ ํญ์ ์ด์ ํญ๋ค์ ํฉ "f(n) = f(n-1) + f(n-3)" ์ผ๋ก ์ ์๋๋๊ฒ์ด ๋ถ๋ถ ๋ฌธ์ ๊ฐ ๋ฐ๋ณต๋๋ค๊ณ ๋ณผ ์ ์๋ค.
- ๋ฉ๋ชจ์ด์ ์ด์ (memoization) : ๋์ ๊ณํ๋ฒ์ ์ด๋ฏธ ๊ณ์ฐ๋ ๊ฐ์ ์ ์ฅํด์ ๋์ผํ ๊ณ์ฐ์ ๋ฐ๋ณตํ์ง ์๋๋ก ํ๋ค. ์ด์ ์ ๊ณ์ฐํ ๊ฐ์ ์ด์ฉํ๋ค๋ ์ ์์ ํํธ๋ฅผ ์ป์ ์ ์๋ค.
- ์ ํ์ ์ฌ์ฉ : "f(n) = f(n-1) + f(n-3)" ๋ก ์ ์๋๋ ์ ํ์์ ์ฌ์ฉํ๋๊ฒ ์์ฒด๊ฐ ์์ ๋ถ๋ถ ๋ฌธ์ ๋ก ๋๋์ด ํด๊ฒฐํ ์ ์๋ค๋ ๋ป์ด๋ค.