๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Programmers lv-0

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

by ๊ทคํ”ผํ‚ค 2022. 11. 27.

 

โค๏ธ Problem

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

 

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

 

  • ์ž…์ถœ๋ ฅ ์˜ˆ & ์„ค๋ช…

 

no balls share result
1 3 2 3
2 5 3 10
  1. ์„œ๋กœ ๋‹ค๋ฅธ ๊ตฌ์Šฌ 3๊ฐœ ์ค‘ 2๊ฐœ๋ฅผ ๊ณ ๋ฅด๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 3์ž…๋‹ˆ๋‹ค.
  2. ์„œ๋กœ ๋‹ค๋ฅธ ๊ตฌ์Šฌ 5๊ฐœ ์ค‘ 3๊ฐœ๋ฅผ ๊ณ ๋ฅด๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 10์ž…๋‹ˆ๋‹ค. 

 

Hint) ์„œ๋กœ ๋‹ค๋ฅธ n๊ฐœ ์ค‘ m๊ฐœ๋ฅผ ๋ฝ‘๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ ๊ณต์‹

 

 


 

๐Ÿ’› Solution

ํ’€์ด

import java.math.BigInteger;

class Solution {
    public int solution(int balls, int share) {
        int mns = balls - share;

        BigInteger answer = Factorial(balls).divide((Factorial(mns).multiply(Factorial(share))));

        return answer.intValue();
    }


    public static BigInteger Factorial (int n) {

        BigInteger fac = BigInteger.ONE;

        for (int i=n; i>0; i--) {
            fac = fac.multiply(BigInteger.valueOf(i));
        }

        return fac;
    }

}

 

 

์ฒ˜๋ฆฌ์†๋„์— ๋Œ€ํ•œ ๋ณด์™„์ด ํ•„์š”ํ•ด ๋ณด์ธ๋‹ค

 


 

๐Ÿ’œ Comment

 

์ฒ˜์Œ์—๋Š” ์ž๋ฃŒํ˜•์„ long์œผ๋กœ ์žก๊ณ  ํŒฉํ† ๋ฆฌ์–ผ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ, ์ฝ”๋“œ ์‹คํ–‰์„ ํ•ด๋ณด๋ฉด ์ž๊พธ ์‹คํŒจ๊ฐ€ ๋‚˜์™”๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ตฌ์Šฌ์˜ ์ˆ˜๋ฅผ 30๊ฐœ๋กœ, ๋‚˜๋ˆ„์–ด ์ค„ ๊ตฌ์Šฌ์˜ ๊ฐœ์ˆ˜๋ฅผ 2๊ฐœ๋กœ ์žก๊ณ  ๋Œ๋ ค๋ดค๋”๋‹ˆ ๊ฐ’์ด -1์ด ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜์˜€๋‹ค.


ํŒฉํ† ๋ฆฌ์–ผ ํด๋ž˜์Šค์˜ ๋กœ์ง๊ณผ ๊ณ„์‚ฐ์‹์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์œผ๋ฏ€๋กœ ์ž๋ฃŒํ˜•์ด ๋„ˆ๋ฌด ์ž‘์•„์„œ ์ œ๋Œ€๋กœ ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.


๊ฒ€์ƒ‰์„ ํ•ด๋ณด๋‹ˆ BigInteger๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ์žˆ์—ˆ๋‹ค. (java.math ํŒจํ‚ค์ง€)


BigInteger๋Š” ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด์ ธ ์ˆซ์ž ๋ฒ”์œ„์— ์ œํ•œ์ด ์—†๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๋‹ค. ์ž๋ฃŒํ˜•์ด ์•„๋‹ˆ๋ฏ€๋กœ ์‚ฌ์šฉ ์‹œ import๋ฅผ ํ•ด์ค˜์•ผํ•˜๊ณ , ๊ณ„์‚ฐ ์‹œ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 


 

๐Ÿค Concept

  • ํ• ๋‹น๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ
    • int == 4byte (-2,147,483,648 ~ 2,147,483,647)
    • long == 8byte (-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807)

 

  • BigInteger์˜ ๋ช‡๋ช‡ ๋ฉ”์„œ๋“œ
    • BigInteger bigNum = new BigInteger();
    • bigNum.add(OTHERNUM);
    • bigNum.substract(OTHERNUM);
    • bigNum.multiply(OTHERNUM);
    • bigNum.divide(OTHERNUM);
    • bigNum.gcd(OTHERNUM);
    • bigNum.abs();
    • bigNum.intValue();
    • bigNum.longValue();

 

 

 

๋Œ“๊ธ€