๋ฉ๋ฆฌ๋ฐ๊ธฐ ๋ฌธ์
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)
๋ฅผ ํด์คฌ์ด์ผ ํ๋๊ฐ๋ณด๋ค)
์ ์ฒ๋ผ ์ ๊ทํ๋ฅผ ๊ฑฐ์น๊ณ ,
๋ถํธ(1) | ์ง์ (11) | ๊ฐ์ (52) ์ ์กฐํฉ์ผ๋ก ์ด 64๋นํธ๋ก ์ด๋ฃจ์ด์ง ์ด์ง์๊ฐ ๋๋ค๋ ๊ฒ์ด๋ค.
0 10000000001 1000000000000000000000000000000000000000000000000000
์ฌ๊ธฐ์ ์ถ์ธกํ ์ ์๋ Number ํ์ ์ ํ๊ณ๋ก๋ ๋ฌด์์ด ์์๊น?
์ง์
์ง์ 11๋นํธ : 2048๊ฐ(0๋ถํฐ 2047) ์ซ์ ํํ ๊ฐ๋ฅ.
์ง์๋ ์์์ฒ๋ผ 6์ ๋ก ๋ํ๋์ ๋ k์ ํด๋นํ๋ ์ซ์๋ค. ์ด ๊ฒฝ์ฐ k=2.
๊ทธ๋ฐ๋ฐ 1๋ณด๋ค ์์ ์์๋ฅผ ํํํ๋ ๊ฒฝ์ฐ์๋ ์ง์ k๊ฐ ์์๊ฐ ๋๋ค.
2์ ๋ณด์ ๋ฐฉ์ vs bias ๋ฐฉ์
์๋ ์ปดํจํฐ๋ก ์์๋ฅผ ํํํ๋ ๋ฐฉ์์ 2์ ๋ณด์ ๋ฐฉ์์ ์ด๋ค.
4๋นํธ์์ +5๋? 0101
์ด๋ค.
-5๋ 1011
์ด๋ค. ( )
๋์ด ๋ํ๋ฉด 1 0000
์ด ๋๊ณ ์ถ๊ฐ๋ก ๋์ด๋จ 1 ๋นํธ๋ ๋น ์ง๊ฒ ๋๊ณ 0000
๋ง ๋จ์์ 0์ด ๋๋ค.
๊ทธ๋ฐ๋ฐ bias ๋ฐฉ์์ ๊ทธ๋ฅ 11๋นํธ ๊ธฐ์ค์ผ๋ก 1023()์ ๋ํ๋ค.
์ง์๊ฐ 0 ์ด๋ฉด ๊ฑฐ๊ธฐ์ 1023์ ๋ํ 1023์ธ 01111111111
์ด ๋๋ค.
์๋ ๋ฐฉ์๊ณผ ๋ฐ๋๋ก ์์(ํน์ 0)์ผ ๊ฒฝ์ฐ ์์ ๋นํธ๊ฐ 0 ์ด ๋๋ค. (1 ๋ถํฐ 1 + 1023 = 1024 = 10000000000
)
์ bias๋ฐฉ์์ ์ฌ์ฉํ๋๊ฐ? (์ฅ์ )
์ด๋ ๊ฒ ํ๋ฉด ์ง๊ด์ ์ผ๋ก 01111111111
์ด 10000000000
๋ณด๋ค ์๋ค๋๊ฑธ ๋ฐ๋ก ์ดํดํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ์ซ์๋ฅผ ๋ถํธ ๋นํธ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์์๋ก ๋ง๋ค๊ธฐ ๋๋ฌธ์(-1022+1023=1) ๋น๊ต๊ฐ ์ฌ์์ง๋ค.
์ bias๋ฐฉ์์ ์ฌ์ฉํ์ง ์๋๊ฐ? (๋จ์ )
๊ทธ๋ผ ๋น๊ต๊ฐ ์ฝ๊ณ ์ง๊ด์ ์ผ๋ก ์ดํดํ๊ธฐ๋ ํธํ ์ด ๋ฐฉ์์ ์ ํ์์๋ ๋ชจ๋๊ฐ ์ฌ์ฉํ์ง ์์๊น?
๊ฐ์
๊ฐ์์ 52๋นํธ๊ฐ ์ค์ง์ ์ผ๋ก ์ซ์๋ฅผ ํ์ํ ์ ์๋ ๋ถ๋ถ์ด๊ธฐ ๋๋ฌธ์ ์ค์ง์ ์ผ๋ก 64๋นํธ๋ฅผ ์ฌ์ฉํ์ง๋ง 52๋น์ ์จ๊ฒจ์ง ๋นํธ 1์ ๋ํ ๊ฐ์ ์์ฐ์๋ง์ ํ๊ธฐํ ์ ๋ฐ์ ์๋ค๋ ํ๊ณ๊ฐ ์๋ค. ```
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๋ณด๋ค ๋ฐฐ ๋ ๋ง์ ์ ์๋ฅผ ํํํ ์ ์๋ค.
infinity
๋ด ์์ ์ ์ฝ๋์ ๋ฌธ์ ์ ๋ ์ฌ๊ธฐ์ ์๋ค.
ํผ๋ณด๋์น ์์ด์ ๊ตฌํ ๋ 1477๋ถํฐ ์์ Number.MAX_VALUE
๋ฅผ ์ด๊ณผํ๊ฒ ๋๊ณ , ๊ทธ ๋ค๋ก ๋ชจ๋ ์ซ์๋ infinity
๋ผ๊ณ ์ ์ฅ๋๋ค.
infinity % 1234567
์ ์ซ์๊ฐ ์๋๋ NaN
์ด ๋๋๊ฒ์ด๊ณ ๊ทธ๋์ ํ๋ ธ๋๊ฒ.