[μκ³ λ¦¬μ¦] λ°±μ€ 1904 01νμΌ
πλ¬Έμ
βꡬμ
ν¨ν΄μ κ°μλ₯Ό νμ νλ λ¬Έμ λ μμ κ·λͺ¨μ ν¨ν΄μ νμ ν΄μ ν΄κ²°νκΈ° μ’μ λμ νλ‘κ·Έλλ°(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 μ΄μΈμ ν΄κ²°λ²μ λν νμ΅μ΄ μΆκ°λ‘ νμν κ² κ°λ€.