๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป DEV/ใ„ด problems

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜

by vodkassi 2021. 10. 14.
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 

 

 

๐Ÿ“ ์ฐธ๊ณ  ์ž๋ฃŒ

๋Œ“๊ธ€