๋‹ค์ด๋‚˜๋ฏนํ”„๋กœ๊ทธ๋ž˜๋ฐ (๋ฉ€๋ฆฌ๋›ฐ๊ธฐ ๋ฌธ์ œ)

date
2025-08-25
tags
  • #ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
  • #NaN
  • #๋‹ค์ด๋‚˜๋ฏนํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • #infinity
  • #์žฌ๊ท€
  • #๋ชจ๋“ˆ๋Ÿฌ

๋ฉ€๋ฆฌ๋›ฐ๊ธฐ ๋ฌธ์ œ

https://school.programmers.co.kr/learn/courses/30/lessons/12914

์ดˆ์•ˆ (์žฌ๊ท€)

์ž˜ ๋ณด๋ฉด ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ํ’€์—ˆ๋Š”๋ฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋กœ ํƒˆ๋ฝ.

function solution3(n) {
    let answer = 0;
    function backtrack(n) {
        if (n < 2) {
            return 1;
        }
        return backtrack(n - 1) + backtrack(n - 2);
    }
    answer = backtrack(n) % 1234567;
    return answer;
}

์ˆ˜์ •์•ˆ 1 (๋ฐ˜๋ณต๋ฌธ, ๋ฐฐ์—ด)

function solution2(n) {
    var answer = 0;
    let arr = [0, 1, 2];
    for (let i = 3; i <= n; i++) {
        let num = arr[i - 2] + arr[i - 1];
        arr.push(num);
        console.log(arr[arr.length - 1]);
    }
    answer = arr[n] % 1234567;
    return answer;
}

์ด๋ ‡๊ฒŒ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•ด ์ค‘๋ณต ๊ณ„์‚ฐ์„ ํ”ผํ•˜๊ณ  ๋’ค์˜ ๋‘ ์ˆซ์ž๋“ค์„ ๋”ํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค.

์žฌ๊ท€ํ˜ธ์ถœ์˜ ๋‹จ์ 

์žฌ๊ท€๋ฐฉ์‹ ํ’€์ด์˜ ๋‹จ์ ์€ backtrack(n)์˜ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•ด๋‘์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ. 5์˜ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์„ ๊ตฌํ• ๋•Œ ์žฌ๊ท€์˜ ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์•„๋ž˜๋กœ ๋‚ด๋ ค๊ฐ€๋ฉด์„œ ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

// 5๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ 4์™€ 3์„ ๊ตฌํ•ด์•ผํ•˜๋Š”๋ฐ, 4๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 3๊ณผ 2๋ฅผ ๊ตฌํ•ด์•ผํ•˜๊ณ , ๋‹ค์‹œ 3์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ .... 

5 : backtrack(4) + backtrack(3)
4 : backtrack(3) + backtrack(2)
3 : backtrack(2) + backtrack(1)
2 : backtrack(1) + backtrack(0)
1 : 1
0 : 0

backtrack(3)์˜ ๊ฒฐ๊ณผ๋Š” 3์ด๊ณ , backtrack(4)์˜ ๊ฒฐ๊ณผ๋Š” 5 ๋ผ๋Š” ์‚ฌ์‹ค์„ ์–ด๋””์— ์ €์žฅํ•ด ๋‘”๋‹ค๋ฉด? backtrack(5)๋ฅผ ํ•  ๋•Œ ๊ตณ์ด 3๊ณผ 4์˜ ๊ฒฝ์šฐ๋กœ ๋‚˜๋ˆ„์–ด ์žฌ๊ท€ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ•˜๋Š” ๋Œ€์‹  ๋‘ ์ˆซ์ž๋ฅผ ๋”ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. ์œ„์˜ ๊ฒฐ๊ณผ๋„ ์ €์žฅ๋˜์–ด์žˆ๋‹ค๋ฉด backtrack(6)์€ ๋˜ ๊ตณ์ด ์žฌ๊ท€ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ๋ฐ˜๋ณตํ•˜๋Š” ๋Œ€์‹  ๋˜ ๋‘ ์ˆซ์ž๋ฅผ ๋”ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์—ฐ์‚ฐ๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ด๋ ‡๊ฒŒ ์ œ์ถœํ•ด๋ณด๋‹ˆ ์ด๋ฒˆ์—๋Š” ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ์•„๋‹ˆ๋ผ ์•„์˜ˆ ์˜ค๋‹ต์ด๋ผ๊ณ  ํ•œ๋‹ค.

๋‹ต์•ˆ

์ˆ˜์ •์•ˆ์ด ์˜ค๋‹ต์ด๋ผ๊ณ  ๋‚˜์˜จ ์›์ธ์€ ๋งˆ์ง€๋ง‰์— ๋‹ต์„ ๋ฐ˜ํ™˜ํ•  ๋•Œ์—๋งŒ ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์„ ๋„ฃ์–ด์คฌ๊ธฐ ๋–„๋ฌธ์ด๋‹ค. ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์„ ๊ตฌํ•  ๋•Œ 1477๋ถ€ํ„ฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ Number.MAX_VALUE๋ฅผ ์ดˆ๊ณผํ•˜๊ฒŒ ๋˜๊ณ , ๊ทธ ๋’ค๋กœ ๋ชจ๋“  ์ˆซ์ž๋Š” infinity๋ผ๊ณ  ์ €์žฅ๋œ๋‹ค. infinity % 1234567์€ ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋‹ˆ NaN์ด ๋˜๋Š”๊ฒƒ์ด๊ณ  ๊ทธ๋ž˜์„œ ํ‹€๋ ธ๋˜๊ฒƒ.

function solution(n) {
    var answer = 0;
    let arr = [0, 1, 2];
    for (let i = 3; i <= n; i++) {
        let num = arr[i - 2] + arr[i - 1];
        arr.push(num % 1234567);
        console.log(arr[arr.length - 1]);
    }
    answer = arr[n];
    return answer;
}

๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์˜ ํŠน์ง•

๊ทธ๋Ÿฐ๋ฐ ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์„ ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ• ๋•Œ ํ•˜๋Š”๊ฒƒ๊ณผ ๋งˆ์ง€๋ง‰์— ๋ฐ˜ํ™˜ํ• ๋•Œ๋งŒ ํ•˜๋Š”๊ฒƒ์ด ๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์งˆ๊นŒ? ์ฆ‰ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ•œ๊ณ„๋ฅผ ๋„˜์–ด์„œ ์ง„์งœ ์ˆซ์ž๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ 

arr.push((arr[i-2] + arr[i-2]) % 1234567);
//...
return arr[n];

์ด๊ฒƒ ์ฒ˜๋Ÿผ ๋ฐฐ์—ด์— ๋„ฃ์„๋•Œ ๋งˆ๋‹ค ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์„ ํ•œ ํ›„์— ๋„ฃ๋Š” ๊ฒƒ๊ณผ

arr.push(arr[i-2] + arr[i-1])
//...
return arr[n] % 1234567;

์ด๊ฒƒ ์ฒ˜๋Ÿผ ๋งˆ์ง€๋ง‰์—๋งŒ ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์„ ๊ฑฐ์น˜๊ณ  ๋ฐ˜ํ™˜ํ•˜๋Š”๊ฒƒ์ด ์ˆ˜ํ•™์ ์œผ๋กœ ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์งˆ๊นŒ?

์ž‘์€ ์˜ˆ์‹œ

6์˜ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์„ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ•ด๋ณธ๋‹ค.

  1. ์ˆซ์ž๋ฅผ ๋ฐฐ์—ด์— ๋‹ด์„๋•Œ๋งˆ๋‹ค 3 ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์„ ํ•œ๋‹ค.
  2. ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ• ๋•Œ๋งŒ 3 ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์„ ํ•œ๋‹ค.

1๋ฒˆ ๋ฐฉ๋ฒ•

์‹œ์ž‘ : arr = [0,1]
2 : 0+1=1, 1 % 3 = 1 , [0,1,1]
3 : 1+1=2, 2 % 3 = 2 , [0,1,1,2]
4 : 1+2=3, 3 % 3 = 0 , [0,1,1,2,0]
5 : 2+0=2, 2 % 3 = 2 , [0,1,1,2,0,2]
6 : 0+2=2, 2 % 3 = 2 , [0,1,1,2,0,2,2]

arr[6] = 2

2๋ฒˆ ๋ฐฉ๋ฒ•

์‹œ์ž‘ : arr = [0,1]
2 : 0+1=1, [0,1,1]
3 : 1+1=2, [0,1,1,2]
4 : 1+2=3, [0,1,1,2,3]
5 : 2+3=5, [0,1,1,2,3,5]
6 : 3+5=8, [0,1,1,2,3,5,8]

arr[6] % 3 = 2

์›๋ฆฌ

์ˆซ์ž n๊ณผ m์ด ์žˆ๋‹ค. ์ด ๋‘ ์ˆซ์ž๋Š” a๋ผ๋Š” ์ˆซ์ž๋กœ ๋‚˜๋ˆ„์—ˆ์„๋•Œ ์ด๋ ‡๊ฒŒ ํ‘œํ˜„๋  ์ˆ˜ ์žˆ๋‹ค.

  • n = xa + r1
  • m = ya + r2

n+m = (xa + r1) + (ya + r2) = a(x + y) + (r1 + r2)

์œ„์˜ ์‹์—์„œ ์•ž์— ๋ถ€๋ถ„ a(x + y) ๋Š” ๋‹น์—ฐํžˆ a๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” ๋ถ€๋ถ„์ด๊ธฐ ๋•Œ๋ฌธ์— r1 + r2 ๋งŒ ๋‚จ๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋‚˜๋จธ์ง€๋ผ๋ฆฌ ๋”ํ•˜๋Š”๊ฒƒ๊ณผ ๊ฐ™๊ฒŒ ๋œ๋‹ค.