์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ Numberํƒ€์ž… (๋ฉ€๋ฆฌ๋›ฐ๊ธฐ ๋ฌธ์ œ)

8/25/2025

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

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

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

๋‹ต์•ˆ

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;
}

Number ํƒ€์ž…

์›์ธ์€ JavaScript์—์„œ๋Š” ๋ชจ๋“  ์ˆซ์ž๋ฅผ Number ํƒ€์ž…์œผ๋กœ ์ €์žฅํ•˜๋Š”๋ฐ,
์ด Number๋Š” 64๋น„ํŠธ ๋ถ€๋™์†Œ์ˆ˜์  ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ๋ชจ๋“  ์ˆซ์ž๋ฅผ ์ €์žฅํ•œ๋‹ค.
(๊ทธ๋ž˜์„œ 3/2๋ฅผ ํ•˜๋ฉด ๋‚˜๋จธ์ง€๋ฅผ ๋ฒ„๋ฆฌ์ง€ ์•Š์•„ ๊ผฌ๋ฐ•๊ผฌ๋ฐ• Math.floor(3/2)๋ฅผ ํ•ด์คฌ์–ด์•ผ ํ–ˆ๋˜๊ฐ€๋ณด๋‹ค)
6=1102=1.10โˆ—226=110_2=1.10*2^2
์œ„ ์ฒ˜๋Ÿผ ์ •๊ทœํ™”๋ฅผ ๊ฑฐ์น˜๊ณ ,
๋ถ€ํ˜ธ(1) | ์ง€์ˆ˜ (11) | ๊ฐ€์ˆ˜ (52) ์˜ ์กฐํ•ฉ์œผ๋กœ ์ด 64๋น„ํŠธ๋กœ ์ด๋ฃจ์–ด์ง„ ์ด์ง„์ˆ˜๊ฐ€ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
0 10000000001 1000000000000000000000000000000000000000000000000000

์—ฌ๊ธฐ์„œ ์ถ”์ธกํ•  ์ˆ˜ ์žˆ๋Š” Number ํƒ€์ž…์˜ ํ•œ๊ณ„๋กœ๋Š” ๋ฌด์—‡์ด ์žˆ์„๊นŒ?

์ง€์ˆ˜

์ง€์ˆ˜ 11๋น„ํŠธ : 2048๊ฐœ(0๋ถ€ํ„ฐ 2047) ์ˆซ์ž ํ‘œํ˜„ ๊ฐ€๋Šฅ.
์ง€์ˆ˜๋ž€ ์œ„์—์ฒ˜๋Ÿผ 6์„ 1.10โˆ—2k1.10 * 2^k ๋กœ ๋‚˜ํƒ€๋ƒˆ์„ ๋•Œ k์— ํ•ด๋‹นํ•˜๋Š” ์ˆซ์ž๋‹ค. ์ด ๊ฒฝ์šฐ k=2.
๊ทธ๋Ÿฐ๋ฐ 1๋ณด๋‹ค ์ž‘์€ ์†Œ์ˆ˜๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ง€์ˆ˜ k๊ฐ€ ์Œ์ˆ˜๊ฐ€ ๋œ๋‹ค.

2์˜ ๋ณด์ˆ˜ ๋ฐฉ์‹ vs bias ๋ฐฉ์‹

์›๋ž˜ ์ปดํ“จํ„ฐ๋กœ ์Œ์ˆ˜๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹์€ 2์˜ ๋ณด์ˆ˜ ๋ฐฉ์‹์„ ์“ด๋‹ค.
4๋น„ํŠธ์—์„œ +5๋Š”? 0101์ด๋‹ค.
-5๋Š” 1011์ด๋‹ค. (ZtS3(โˆ’5)=NtS4(24โˆ’5)=1011ZtS_{3}(โˆ’5) = NtS_4(2^4โˆ’5)=1011 )
๋‘˜์ด ๋”ํ•˜๋ฉด 1 0000์ด ๋˜๊ณ  ์ถ”๊ฐ€๋กœ ๋Š˜์–ด๋‹จ 1 ๋น„ํŠธ๋Š” ๋น ์ง€๊ฒŒ ๋˜๊ณ  0000๋งŒ ๋‚จ์•„์„œ 0์ด ๋œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ bias ๋ฐฉ์‹์€ ๊ทธ๋ƒฅ 11๋น„ํŠธ ๊ธฐ์ค€์œผ๋กœ 1023(211โˆ’1โˆ’12^{11-1}-1)์„ ๋”ํ•œ๋‹ค.
์ง€์ˆ˜๊ฐ€ 0 ์ด๋ฉด ๊ฑฐ๊ธฐ์— 1023์„ ๋”ํ•œ 1023์ธ 01111111111 ์ด ๋œ๋‹ค.
์›๋ž˜ ๋ฐฉ์‹๊ณผ ๋ฐ˜๋Œ€๋กœ ์Œ์ˆ˜(ํ˜น์€ 0)์ผ ๊ฒฝ์šฐ ์•ž์— ๋น„ํŠธ๊ฐ€ 0 ์ด ๋œ๋‹ค. (1 ๋ถ€ํ„ฐ 1 + 1023 = 1024 = 10000000000)

์™œ bias๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€? (์žฅ์ )

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ง๊ด€์ ์œผ๋กœ 01111111111์ด 10000000000๋ณด๋‹ค ์ž‘๋‹ค๋Š”๊ฑธ ๋ฐ”๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ์ˆซ์ž๋ฅผ ๋ถ€ํ˜ธ ๋น„ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์–‘์ˆ˜๋กœ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์—(-1022+1023=1) ๋น„๊ต๊ฐ€ ์‰ฌ์›Œ์ง„๋‹ค.

์™œ bias๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๊ฐ€? (๋‹จ์ )

๊ทธ๋Ÿผ ๋น„๊ต๊ฐ€ ์‰ฝ๊ณ  ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ๋„ ํŽธํ•œ ์ด ๋ฐฉ์‹์„ ์™œ ํ‰์†Œ์—๋„ ๋ชจ๋‘๊ฐ€ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„๊นŒ?

๊ฐ€์ˆ˜

๊ฐ€์ˆ˜์˜ 52๋น„ํŠธ๊ฐ€ ์‹ค์งˆ์ ์œผ๋กœ ์ˆซ์ž๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์งˆ์ ์œผ๋กœ 64๋น„ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ 52๋น„์— ์ˆจ๊ฒจ์ง„ ๋น„ํŠธ 1์„ ๋”ํ•œ 2532^{53}๊ฐœ์˜ ์ž์—ฐ์ˆ˜๋งŒ์„ ํ‘œ๊ธฐํ•  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค. ```

console.log(Number.MAX_VALUE); // 1.7976931348623157e+308
console.log(Number.MIN_VALUE); // 5e-324
console.log(Number.MAX_SAFE_INTEGER); // 9,007,199,254,740,991
console.log(Number.MIN_SAFE_INTEGER); // -9007199254740991

์ž๋ฐ”์˜ long๋„ 64๋น„ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ JS๋ณด๋‹ค 264โˆ’253=2112^{64}-2{53}=2^{11}๋ฐฐ ๋” ๋งŽ์€ ์ •์ˆ˜๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

infinity

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