๐๋ฌธ์
โ๊ตฌ์
ํจํด์ ๊ฐ์๋ฅผ ํ์ ํ๋ ๋ฌธ์ ๋ ์์ ๊ท๋ชจ์ ํจํด์ ํ์ ํด์ ํด๊ฒฐํ๊ธฐ ์ข์ ๋์ ํ๋ก๊ทธ๋๋ฐ(Dynamic Programming)
๊ณํ๋ฒ์ผ๋ก ํ๊ธฐ ์ ํฉํ ๋ฌธ์ ์ด๋ค.
์ผ๋ฐ์ ์ธ ์ด์ง๋ฒ์ด๋ผ๋ฉด N์ด 1์ผ๋ 0๊ณผ 1์ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์ 2๊ฐ ๋์์ผํ์ง๋ง, ์ด ๋ฌธ์ ์ ์กฐ๊ฑด์ ์ดํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
1. ์ด์ง๋ฒ์ ๊ตฌ์ฑํ ๋ 1๊ณผ 00์ ์กฐํฉ์ผ๋ก๋ง ๊ตฌ์ฑ์ ํด์ผํ๋ค.
2. 0์ 01 ํน์ 10 ์ฒ๋ผ ์ฌ์ฉํ ์ ์๊ณ 0์ด 2๊ฐ๊ฐ ๋ถ์ด์์ด์ผํ๋ค.
์ฃผ์ด์ง N์ ๋ฐ๋ผ ํํ๋ ์ ์๋ ์ด์ง๋ฒ์ ์ข ๋ฅ๋ฅผ ์์๋ณด๋ฉด ํจํด์ ํ์ ํ ์ ์์๊ฒ์ผ๋ก ๊ธฐ๋๋๋ค.
๐ฒ ํจํด
N์ด 1์ผ๋ ๋ถํฐ 7์ผ๋ ๊น์ง์ ํจํด์ ํ์ ํ ๊ฒฐ๊ณผ ํผ๋ณด๋์น ์์ด์ฒ๋ผ dp[i] = dp[i-1] + dp[i-2] ์ ํจํด์ ๊ฐ์ง๊ณ ์์์ ์ ์ ์๋ค.
์ด ๊ฒ์ ๋ฐํ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํด๋ณด์.
์ฝ๋.
const N = require("fs").readFileSync("./input.txt", "utf-8").trim();
const dp = [1, 2];
const NUMBER_OF_DIVIDE = 15746;
const solution = (n) => {
for (let i = 2; i < n; i++)
dp[i] = (dp[i - 1] + dp[i - 2]) % NUMBER_OF_DIVIDE;
};
solution(N);
console.log(dp[N - 1]);
๐ฅ๋ฐฐ์ด ์
์ด์ ์ ์ฌ๋ฆฐ ๋ฐฑ์ค 1003 ํผ๋ณด๋์น ํจ์ ๊ธ์์ "ํฐ ๋ฌธ์ ๋ฅผ ์์ ๋จ์์ ๋ฌธ์ ๋ก ๋ถํด ํ์ฌ ํจํด์ ํ์ ํด์ผํ๋ ์ " ์ ์์ง ์๊ณ DP ๋ฌธ์ ๋ฅผ ํ๋ ์ผ๋ํด ๋์๋๋์ด๋์ ๋ ๋์ ๊ณํ๋ฒ์ ์ต์ํด์ก๋ค๊ณ ์๊ฐํ๊ณ , ์ ์ฌํ ํํ์ DP ๋ฌธ์ ๋ ์ด๋์ ๋ ํ ์ ์๊ฒ ๋๊ฒ ๊ฐ๋ค. ํ์ง๋ง, ๋ค๋ฅธ ํจํด์ผ๋ก DP ๊ณํ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์ฌ์ ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ฐ ์ด๋ ค์์ด ์๋ค. ๋จ์ํ ํผ๋ณด๋์น ์์ด์ ํ๋ ์์ ๊ฐ๋ DP ์ด์ธ์ ํด๊ฒฐ๋ฒ์ ๋ํ ํ์ต์ด ์ถ๊ฐ๋ก ํ์ํ ๊ฒ ๊ฐ๋ค.
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ๋ฒ๋ธ์ ๋ ฌ(Bubble sort) (1) | 2025.01.09 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ๋ฐฑ์ค 14651 ๊ฑท๋ค๋ณด๋ ์ ์ฒ์ญ ์ผ (Large) (0) | 2025.01.02 |
[์๊ณ ๋ฆฌ์ฆ] ๋ฐฑ์ค 1003 ํผ๋ณด๋์น ํจ์ (1) | 2024.12.12 |
[์๊ณ ๋ฆฌ์ฆ] ๋ฐฑํธ๋ํน(Backtracking) (0) | 2024.11.07 |
[์๊ณ ๋ฆฌ์ฆ] ๋์ ๊ณํ๋ฒ, DP(Dydamic Programming) (1) | 2024.09.19 |