Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๋ฐฑ์ค€ 1904 01ํƒ€์ผ

Ama_grammer 2024. 12. 26. 19:38

๐Ÿ“–๋ฌธ์ œ

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 ์ด์™ธ์— ํ•ด๊ฒฐ๋ฒ•์— ๋Œ€ํ•œ ํ•™์Šต์ด ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™๋‹ค.