728x90
๐ ๋ฌธ์ ์ค๋ช
ํผ๋ณด๋์น ์๋ F(0) = 0, F(1) = 1์ผ ๋, 1 ์ด์์ n์ ๋ํ์ฌ F(n) = F(n-1) + F(n-2) ๊ฐ ์ ์ฉ๋๋ ์ ์ ๋๋ค. ์๋ฅผ๋ค์ด
- F(2) = F(0) + F(1) = 0 + 1 = 1
- F(3) = F(1) + F(2) = 1 + 1 = 2
- F(4) = F(2) + F(3) = 1 + 2 = 3
- F(5) = F(3) + F(4) = 2 + 3 = 5
์ ๊ฐ์ด ์ด์ด์ง๋๋ค. 2 ์ด์์ n์ด ์ ๋ ฅ๋์์ ๋, n๋ฒ์งธ ํผ๋ณด๋์น ์๋ฅผ 1234567์ผ๋ก ๋๋ ๋๋จธ์ง๋ฅผ ๋ฆฌํดํ๋ ํจ์, solution์ ์์ฑํด ์ฃผ์ธ์.
๐ ์ ํ ์ฌํญ
- n์ 2 ์ด์ 100,000 ์ดํ์ธ ์์ฐ์์ ๋๋ค.
๐ ์
์ถ๋ ฅ ์
n | return |
3 | 2 |
5 | 5 |
๐ ์
์ถ๋ ฅ ์ ์ค๋ช
ํผ๋ณด๋์น์๋ 0๋ฒ์งธ๋ถํฐ 0, 1, 1, 2, 3, 5, ... ์ ๊ฐ์ด ์ด์ด์ง๋๋ค.
๐ ๋์ ์๋ฃจ์
function solution(n) {
let fib = {0:0, 1:1};
let i = 2;
while (i <= n){
fib[i] = (fib[i-1] + fib[i-2]) % 1234567;
i++;
}
return fib[n] % 1234567
}
๐ ์ ๊ทผ ๋ฐฉ๋ฒ
- ์ผ๋ฐ์ ์ธ DP ๋ ์ฌ๊ท๋ก ์ ๊ทผํ๊ธฐ๋ณด๋ค, 1234567๋ก ๋๋ ๋๋จธ์ง๋ฅผ ๋ฐํํด์ผ ํ๋ค๋ ๊ฒ์ด ํต์ฌ์ด์๋ ๋ฌธ์ ๋ค. ๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ง๋ 20๋ ๋์ ์ถ์๋ ๋๋ถ๋ถ์ ์ปดํจํฐ๋ 32๋นํธ ์ํคํ ์ฒ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ก๊ธฐ ๋๋ฌธ์, 32๋นํธ ํ๋ก์ธ์์์ ์คํ๋๋๋ก ์ค๊ณ๋์๋ค. 2,147,483,647 (2^31 - 1)์ ์ปดํจํ ์์ 32๋นํธ ๋ถํธ ์ ์ํ์ ์ต๋๊ฐ์ด๋ฉฐ, ์ผ๋ฐ์ ์ธ CPU ์์ ์๋ํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ int ํ์ผ๋ก ์ ์ธ๋ ์ ์๋ ์ต๋๊ฐ ์ญ์ 2,147,483,647 ์ด๋ค. ์ฌ๊ท๋ DP ๋ก ํผ๋ณด๋์น ์์ด์ ๊ตฌํ ์๋ ์์ง๋ง, 46๋ฒ์งธ ํผ๋ณด๋์น ์์ด์ 2,971,215,073 ์ด๋ค. CPU ์์ ์ฐ์ฐํ ์ ์๋ ์ต๋๊ฐ์ ์ด๊ณผํ ์ซ์์ด๊ธฐ ๋๋ฌธ์ ์ด ์ง์ ๋ถํฐ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํด๋น ๋ฌธ์ ์์๋ ๋ชจ๋ ๊ฒฐ๊ณผ์ ๋ํด 1234567๋ก modulo ์ฐ์ฐ์ ํ ๊ฒ์ ์๊ตฌํ๊ณ ์๋ ๊ฒ์ด๋ค. ๋๋จธ์ง ๊ฐ์ ๊ตฌํ๋ฉด ์ต๋๊ฐ์ ์ด๊ณผํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
- modulo ์ฐ์ฐ์ ์ฃผ์ ํน์ง์ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, ์ด ํน์ง์ ์์ฉํ์ฌ ํผ๋ณด๋์น ์์ด์ ๊ตฌํ ๋๋ง๋ค 1234567๊ณผ์ ๋ชจ๋๋ฌ ๊ฐ์ ๊ตฌํ๋ฉด ๊ฒฐ๊ณผ๋ฅผ ๋ฌธ์ ์์ด ๊ตฌํ ์ ์๋ค.
(a + b) % n = ((a % n) + (b % n)) % n
(a - b) % n = ((a % n) - (b % n)) % n
๐ ์ฐธ๊ณ ์๋ฃ
๋๊ธ