let's get IT with DAVINA ๐Ÿ’ป

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]Lv0. ๊ตฌ์Šฌ์„ ๋‚˜๋ˆ„๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ ๋ณธ๋ฌธ

DEV_IN/๋ฌธ์ œํ’€์ด

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]Lv0. ๊ตฌ์Šฌ์„ ๋‚˜๋ˆ„๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜

๋‹ค๋นˆ์น˜์ฝ”๋“œ๐Ÿ’Ž 2023. 3. 17. 15:36

โ“ ๋ฌธ์ œ ์„ค๋ช…

๋จธ์“ฑ์ด๋Š” ๊ตฌ์Šฌ์„ ์นœ๊ตฌ๋“ค์—๊ฒŒ ๋‚˜๋ˆ„์–ด์ฃผ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์Šฌ์€ ๋ชจ๋‘ ๋‹ค๋ฅด๊ฒŒ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ๋จธ์“ฑ์ด๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ตฌ์Šฌ์˜ ๊ฐœ์ˆ˜ 
balls์™€ ์นœ๊ตฌ๋“ค์—๊ฒŒ ๋‚˜๋ˆ„์–ด ์ค„ ๊ตฌ์Šฌ ๊ฐœ์ˆ˜ share์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, balls๊ฐœ์˜ ๊ตฌ์Šฌ ์ค‘ share๊ฐœ์˜ ๊ตฌ์Šฌ์„ ๊ณ ๋ฅด๋Š” ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

๐Ÿšซ ์ œํ•œ์‚ฌํ•ญ

  • 1 ≤ balls ≤ 30
  • 1  share ≤ 30
  • ๊ตฌ์Šฌ์„ ๊ณ ๋ฅด๋Š” ์ˆœ์„œ๋Š” ๊ณ ๋ คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • share  balls

๐Ÿ—๏ธ ์ž…์ถœ๋ ฅ ์˜ˆ

balls share result
3 2 3
5 2 10

๐Ÿ—๏ธ ์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

  • ์„œ๋กœ ๋‹ค๋ฅธ ๊ตฌ์Šฌ 3๊ฐœ ์ค‘ 2๊ฐœ๋ฅผ ๊ณ ๋ฅด๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 3์ž…๋‹ˆ๋‹ค.

๐Ÿ—๏ธ HINT

์„œ๋กœ ๋‹ค๋ฅธ n๊ฐœ ์ค‘ m๊ฐœ๋ฅผ ๋ฝ‘๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ (์กฐํ•ฉ nCm)


โ—๏ธ๋น„๋‹ˆ's ํ’€์ด

๋กœ์ง ์ž์ฒด๋Š” ๋งž์•˜์ง€๋งŒ Math.round ๋˜๋Š” BigInt๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„ ์ œ์ถœ ํ›„ ๊ณ„์† 80์ ์ด์—ˆ๋‹ค..

function solution(balls, share) {
	//ํŒฉํ† ๋ฆฌ์–ผ์„ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜
    function factorial(n){
        let base=BigInt(1);
        for(let i=2;i<=n;i++){
            base=base*BigInt(i);
        }
        return base;
    }
    
    return (factorial(balls)/(factorial(balls-share)*factorial(share)));
}

//OR
function solution(balls, share) {
	//ํŒฉํ† ๋ฆฌ์–ผ์„ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜
    function factorial(n){
        let base=1;
        for(let i=2;i<=n;i++){
            base=base*(i);
        }
        return base;
    }
    
    return Math.round(factorial(balls)/(factorial(balls-share)*factorial(share)));
}

⊕ Extra Knowledge

์—ฌ๋Ÿฌ ๋ธ”๋กœ๊ทธ์™€ ํ’€์ด ์„ค๋ช…์„ ๋ด๋„ Math.round๋ฅผ ์ด์šฉํ•ด ์™œ ๋ฐ˜์˜ฌ๋ฆผ์„ ํ•ด์•ผํ•˜๋Š”์ง€ ์ดํ•ด๊ฐ€ ๊ฐ€์ง€ ์•Š์•˜๋‹ค.. ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฉด ์˜คํžˆ๋ ค Math.floor์ด ๋งž์ง€ ์•Š์„๊นŒ๋ž€ ์ƒ๊ฐ์„ ํ–ˆ๋Š”๋ฐ ์ปดํ“จํ„ฐ๊ฐ€ ์ •์ˆ˜๋ฅผ ์ฝ์–ด๋“ค์ด๋Š” ๋ฐฉ์‹์„ ์ž˜ ๋ชฐ๋ผ์„œ ์˜€๋‹ค.. ์ด๋ž˜์„œ CS๊ธฐ์ดˆ์ง€์‹์ด ์ค‘์š”ํ•˜๊ตฌ๋‚˜ ์‹ถ์—ˆ๋‹ค. 
  • JS Number ๋ฒ”์œ„ → Number ํƒ€์ž…์€ ๋ฐฐ์ •๋ฐ€๋„ 64๋น„ํŠธ ์ด์ง„ ํ˜•์‹ IEEE 754 ๊ฐ’(-(2^53 − 1)๋ถ€ํ„ฐ 2^53 − 1๊นŒ์ง€์˜ ์ˆ˜)์ž…๋‹ˆ๋‹ค.
  • BUT, 30! → 2.6525286e+32 (์ปดํ“จํ„ฐ๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์ˆซ์ž์˜ ๋ฒ”์œ„๋ณด๋‹ค ํ›จ์”ฌ ํผ)
  • ๋”ฐ๋ผ์„œ, ์ง„์ˆ˜ VS ๊ฐ€์ˆ˜์—์„œ ๊ฐ€์ˆ˜๋ถ€๋ถ„์ด ๋‹ค ๋ฒ„๋ ค์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋งˆ์ง€๋ง‰์— ๊ฐ€์žฅ ์ •๋‹ต์— ๊ฐ€๊นŒ์šด ์ˆ˜๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด์„  ๋ฐ˜์˜ฌ๋ฆผ์„ ํ•ด์ค˜์•ผํ•œ๋‹ค. 
๋ถ€๋™ ์†Œ์ˆ˜์  ๊ธฐ์ˆ˜๋ฒ•์—์„œ ์–ด๋–ค ์ˆ˜์˜ ์œ ํšจ ์ž๋ฆฟ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ถ€๋ถ„. ์˜ˆ๋ฅผ ๋“ค๋ฉด, 10์ง„์ˆ˜ 0.0001234๋Š” 0.1234-3์œผ๋กœ ํ‘œํ˜„๋˜๋Š”๋ฐ, ์ด๋•Œ์— 0.1234๋ฅผ ๊ฐ€์ˆ˜๋ผ๊ณ  ํ•˜๊ณ  -3์„ ์ง€์ˆ˜(exponent)๋ผ๊ณ  ํ•œ๋‹ค.
  • OR
  • BigInt (ํฐ ์ •์ˆ˜๋ฅผ ๋ณด๋‹ค ์ปดํ“จํ„ฐ๊ฐ€ ์ •ํ™•ํ•˜๊ฒŒ ์ฝ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฐฉ์‹) Math๊ฐ์ฒด์˜ method๋Š” Number๋งŒ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ!
BigInt๋Š” Number ์›์‹œ ๊ฐ’์ด ์•ˆ์ •์ ์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€์น˜์ธ 2^53 - 1๋ณด๋‹ค ํฐ ์ •์ˆ˜๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ด์žฅ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ, ํŒฉํ† ๋ฆฌ์–ผ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ, ๋“ค์–ด์˜ค๋Š” ์ˆซ์ž๋“ค์„ ๋‹ค BigInt() ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋ฉด Math.round๋ฅผ ์•ˆํ•ด๋„ ํฐ ์ˆ˜๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ๋จ!
Comments