๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/Programmers

[Programmers] Lv.0 | ๊ตฌ์Šฌ์„ ๋‚˜๋ˆ„๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ | Java

by unknownomad 2025. 10. 20.

๋ฌธ์ œ

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

 

ํ’€์ด

class Solution {
    public int solution(int balls, int share) {
        long result = 1;
        
        for (int i = 1; i <= share; i++) {
            result = result * (balls - i + 1) / i;
        }
        
        return (int) result;
    }
}

 


 

๐Ÿ’ก ์กฐํ•ฉ ๊ณ„์‚ฐ ์™„์ „ ์ •๋ณต — ํŒฉํ† ๋ฆฌ์–ผ ์—†์ด ์•ˆ์ „ํ•˜๊ฒŒ ๊ตฌํ•˜๊ธฐ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—์„œ ์ •๋ง ์ž์ฃผ ๋‚˜์˜ค๋Š” ๋Œ€ํ‘œ์ ์ธ ์ˆ˜ํ•™ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜๊ฐ€ ์กฐํ•ฉ(Combination)

  • ์˜ˆ: “๊ตฌ์Šฌ N๊ฐœ ์ค‘ R๊ฐœ๋ฅผ ๊ณ ๋ฅผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜”๋ฅผ ๊ตฌํ•˜๋ผ๋Š” ๋ฌธ์ œ

์ฒ˜์Œ์—” ๊ณต์‹๋งŒ ์™ธ์›Œ์„œ ๊ตฌํ˜„ํ•˜๋ ค๋‹ค ํŒฉํ† ๋ฆฌ์–ผ๋กœ ์ธํ•œ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋‚˜ ๊ณต์‹์ด ์™œ ๊ทธ๋ ‡๊ฒŒ ๋˜๋Š”์ง€ ์ดํ•ด ์•ˆ ๋˜๋Š” ์ƒํ™ฉ์ด ์ž์ฃผ ๋ฐœ์ƒํ•จ
๊ทธ๋ž˜์„œ ์ด๋ฒˆ ๊ธ€์—์„œ๋Š”

  • โœ… ์กฐํ•ฉ์ด ๋ญ”์ง€
  • โœ… ๊ณต์‹์ด ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์–ด์ง€๋Š”์ง€
  • โœ… ํŒฉํ† ๋ฆฌ์–ผ ๋Œ€์‹  ๋‹จ๊ณ„๋ณ„๋กœ ๊ณ„์‚ฐํ•˜๋Š” ์ด์œ 
  • โœ… long ํƒ€์ž…์„ ์“ฐ๋Š” ์ด์œ 
    ๊นŒ์ง€ ์ „๋ถ€ ์ •๋ฆฌ

 

๐Ÿช„ 1. ์กฐํ•ฉ์ด๋ž€?

์กฐํ•ฉ(Combination)์€ ์ˆœ์„œ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  n๊ฐœ ์ค‘ r๊ฐœ๋ฅผ ๊ณ ๋ฅด๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋งํ•จ

์˜ˆ: ๊ตฌ์Šฌ 3๊ฐœ ์ค‘ 2๊ฐœ๋ฅผ ๊ณ ๋ฅธ๋‹ค๊ณ  ๊ฐ€์ •

{A, B}, {A, C}, {B, C}

๐Ÿ‘‰ ์ด 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•จ

 

์ˆ˜ํ•™์  ํ‘œํ˜„:

  • ( n ): ์ „์ฒด ๊ฐœ์ˆ˜
  • ( r ): ๊ณ ๋ฅด๋Š” ๊ฐœ์ˆ˜

 

๐Ÿงฎ 2. ์กฐํ•ฉ์˜ ๊ธฐ๋ณธ ๊ณต์‹

์กฐํ•ฉ์˜ ๊ธฐ๋ณธ ๊ณต์‹์€ ์•„๋ž˜์™€ ๊ฐ™์Œ

 

์˜ˆ: 5๊ฐœ ์ค‘ 3๊ฐœ ๊ณ ๋ฅด๊ธฐ → ( 5C3 )

์ฆ‰, 10๊ฐ€์ง€ ์กฐํ•ฉ์ด ์ƒ๊น€

 

๐Ÿง  3. ๊ณต์‹์ด ๊ทธ๋ ‡๊ฒŒ ๋‚˜์˜ค๋Š” ์ด์œ 

์ฒ˜์Œ์— 5๊ฐœ ์ค‘ 3๊ฐœ๋ฅผ ์ˆœ์„œ๋ฅผ ๊ณ ๋ คํ•ด์„œ ๋ฝ‘๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋ฉด:

  • 1๋ฒˆ์งธ: 5๊ฐœ ์ค‘ ์„ ํƒ
  • 2๋ฒˆ์งธ: 4๊ฐœ ์ค‘ ์„ ํƒ
  • 3๋ฒˆ์งธ: 3๊ฐœ ์ค‘ ์„ ํƒ

๐Ÿ‘‰ ( 5 × 4 × 3 = 60 )๊ฐ€์ง€ ๊ฒฝ์šฐ

 

ํ•˜์ง€๋งŒ ์กฐํ•ฉ์—์„œ๋Š” ์ˆœ์„œ๋ฅผ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—
์˜ˆ: A-B-C, B-A-C, C-B-A … ๋ชจ๋‘ ๊ฐ™์€ ๊ฒฝ์šฐ๋กœ ์ทจ๊ธ‰๋จ

3๊ฐœ๋ฅผ ๋ฝ‘์„ ๋•Œ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ( 3! = 6 )๊ฐ€์ง€

 

๊ทธ๋ž˜์„œ


์ด ๋˜๋Š” ๊ฑฐ๊ณ , ๊ณต์‹๋„


์˜ ํ˜•ํƒœ๋กœ ๋‹จ์ˆœํ™”๋จ
๐Ÿ‘‰ (n - r)! ๋ถ€๋ถ„์ด ์•ฝ๋ถ„๋ผ์„œ ์‚ฌ๋ผ์ง€๋Š” ๊ฒƒ

 

๐Ÿšซ 4. ํŒฉํ† ๋ฆฌ์–ผ์„ ์ง์ ‘ ์“ฐ๋ฉด ์•ˆ ๋˜๋Š” ์ด์œ 

์ฒ˜์Œ์—๋Š” ๋งŽ์ด๋“ค ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•จ:

return factorial(n) / (factorial(n - r) * factorial(r));

 

ํ•˜์ง€๋งŒ ์ด ๋ฐฉ์‹์—๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ

  1. ํŒฉํ† ๋ฆฌ์–ผ ๊ฐ’์ด ๋„ˆ๋ฌด ๋นจ๋ฆฌ ์ปค์ง
    • 20!๋งŒ ํ•ด๋„ 2,432,902,008,176,640,000
    • int๋‚˜ long์œผ๋กœ๋„ ๊ฐ๋‹น ์•ˆ ๋˜๋Š” ๊ฐ’์ด ๊ธˆ๋ฐฉ ๋‚˜์˜ด
  2. ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ์ด ๋งŽ์Œ (๊ณ„์‚ฐํ–ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ๋‚˜๋ˆ”)
  3. ์„ฑ๋Šฅ ์ €ํ•˜ + ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ์œ„ํ—˜

๊ทธ๋ž˜์„œ ํŒฉํ† ๋ฆฌ์–ผ ์ž์ฒด๋ฅผ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๊ณ , ๊ณต์‹์„ ๋‹จ๊ณ„๋ณ„ ๊ณฑ์…ˆ·๋‚˜๋ˆ—์…ˆ์œผ๋กœ ๋ฐ”๊ฟ”์„œ ๊ณ„์‚ฐํ•จ

 

๐Ÿช„ 5. ํŒฉํ† ๋ฆฌ์–ผ์„ ์“ฐ์ง€ ์•Š๊ณ  ๋‹จ๊ณ„๋ณ„๋กœ ๊ณ„์‚ฐํ•˜๊ธฐ

class Solution {
    public int solution(int balls, int share) {
        long result = 1;

        for (int i = 1; i <= share; i++) {
            result = result * (balls - i + 1) / i;
        }

        return (int) result;
    }
}

 

๐Ÿงญ 6. ์ฝ”๋“œ ์„ค๋ช… 

๋ณ€์ˆ˜ ์˜๋ฏธ  ์ˆ˜ํ•™ ๊ธฐํ˜ธ
balls ์ „์ฒด ๊ตฌ์Šฌ ๊ฐœ์ˆ˜ n
share ๋ฝ‘๋Š” ๊ตฌ์Šฌ ๊ฐœ์ˆ˜ r
i ํ˜„์žฌ ๋ช‡ ๋ฒˆ์งธ ๋ฝ‘๋Š” ์ค‘์ธ์ง€ (1๋ถ€ํ„ฐ r๊นŒ์ง€) -
result ๋ˆ„์  ๊ณ„์‚ฐ ๊ฐ’ nCr

 

(balls - i + 1)์€ ๋ถ„์ž์—์„œ ์ ์  ์ค„์–ด๋“œ๋Š” ์„ ํƒ์ง€๋ฅผ ์˜๋ฏธ
/ i๋Š” ๋ถ„๋ชจ์—์„œ ์ค‘๋ณต๋˜๋Š” ์ˆœ์„œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋ถ€๋ถ„

 

์˜ˆ: balls=5, share=3์ผ ๋•Œ

i ๋ถ„์ž (balls - i + 1) ๋ถ„๋ชจ (i) result ๊ณ„์‚ฐ
1 5 1 1 × 5 ÷ 1 = 5
2 4 2 5 × 4 ÷ 2 = 10
3 3 3 10 × 3 ÷ 3 = 10

๐Ÿ‘‰ ์ตœ์ข… ๊ฒฐ๊ณผ = 10 โœ…

 

๐Ÿงฑ 7. long ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  • int๋Š” ์•ฝ 21์–ต๊นŒ์ง€๋งŒ ์ €์žฅ ๊ฐ€๋Šฅ (2,147,483,647)
  • ํ•˜์ง€๋งŒ ํŒฉํ† ๋ฆฌ์–ผ์ด๋‚˜ ์กฐํ•ฉ ์ค‘๊ฐ„ ๊ณ„์‚ฐ๊ฐ’์€ ํ›จ์”ฌ ์ปค์งˆ ์ˆ˜ ์žˆ์Œ
  • balls์˜ ์ตœ๋Œ€๊ฐ’์ด 30์ด๋ผ๋„ ์ค‘๊ฐ„ ๊ณ„์‚ฐ๊ฐ’์ด int ๋ฒ”์œ„๋ฅผ ๋„˜์„ ์ˆ˜ ์žˆ์Œ

๋”ฐ๋ผ์„œ ์ค‘๊ฐ„ ๊ณ„์‚ฐ์„ long์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋งˆ์ง€๋ง‰์— int๋กœ ๋ณ€ํ™˜ํ•ด๋„ ์•ˆ์ „ํ•จ

 

๐Ÿ“ ์ •๋ฆฌ ์š”์•ฝ

ํ•ญ๋ชฉ ์ž˜๋ชป๋œ ๋ฐฉ์‹ โŒ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ์‹ โœ…
๊ตฌํ˜„ ๋ฐฉ๋ฒ• ํŒฉํ† ๋ฆฌ์–ผ๋กœ ์ง์ ‘ ๊ณ„์‚ฐ ๋‹จ๊ณ„๋ณ„ ๊ณฑ์…ˆ/๋‚˜๋ˆ—์…ˆ
์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ์œ„ํ—˜ ๋†’์Œ ๋‚ฎ์Œ
์„ฑ๋Šฅ ๋ถˆํ•„์š”ํ•œ ๊ณ„์‚ฐ ๋งŽ์Œ ๊ณ„์‚ฐ ๊ฐ„๊ฒฐ
์ž๋ฃŒํ˜• int long ์‚ฌ์šฉ ํ›„ int ๋ณ€ํ™˜


๊ณต์‹์„ ๊ทธ๋Œ€๋กœ ๋‹จ๊ณ„๋ณ„๋กœ ํ’€์–ด ์“ฐ๋ฉด ํŒฉํ† ๋ฆฌ์–ผ ์—†์ด๋„ ์กฐํ•ฉ์„ ์ •ํ™•ํ•˜๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ์Œ

 

๐Ÿ ๋งˆ๋ฌด๋ฆฌ

  • ์กฐํ•ฉ ๊ณต์‹์€ <์ˆœ์„œ๋ฅผ ์ œ๊ฑฐํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜>๋ผ๋Š” ๊ฐœ๋…์—์„œ ์ถœ๋ฐœํ•จ
  • ํŒฉํ† ๋ฆฌ์–ผ์„ ์ง์ ‘ ์“ฐ๋ฉด ์ค‘๊ฐ„ ๊ฐ’์ด ๋„ˆ๋ฌด ์ปค์ง€๋ฏ€๋กœ ํ”ผํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ
  • ๊ณฑ์…ˆ๊ณผ ๋‚˜๋ˆ—์…ˆ์„ ๋ฃจํ”„๋กœ ๋‚˜๋ˆ„์–ด ์ฒ˜๋ฆฌํ•˜๋ฉด ์•ˆ์ „ํ•˜๊ณ  ๊น”๋”ํ•˜๊ฒŒ ๊ณ„์‚ฐ ๊ฐ€๋Šฅ
  • ์ž๋ฃŒํ˜•์€ ๋ฐ˜๋“œ์‹œ long์„ ์‚ฌ์šฉํ•˜๊ธฐ

๋Œ“๊ธ€