๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜

[Java] BOJ ์ดํ•ญ ๊ณ„์ˆ˜ 1

by ๐ŸŠ๊ทค๐ŸŠ 2024. 7. 13.

๋ฌธ์ œ 

๋ฌธ์ œ ๋งํฌ https://www.acmicpc.net/problem/11050

  • ์ž์—ฐ์ˆ˜ ๊ณผ ์ •์ˆ˜ ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ์ดํ•ญ ๊ณ„์ˆ˜ ๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.
  • ์ฒซ์งธ ์ค„์— ๊ณผ ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤  ≤ 10, 0 ≤   )
  • ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์•„์ด๋””์–ด

  • ์กฐํ•ฉ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๊ตฌํ•˜๋Š” ์‹์€ N! / (K! * (N - K)!) ์ด๋‹ค. ๋”ฐ๋ผ์„œ ํŒฉํ† ๋ฆฌ์–ผ์„ ๋‹ค ๊ณ„์‚ฐํ•ด์„œ ๋‚˜๋ˆŒ ์ˆ˜๋„ ์žˆ์ง€๋งŒ K์™€ (N - K) ์ค‘์— ๋” ํฐ ๊ฐ’์„ ๊ตฌํ•ด์„œ ๊ทธ ๊ฐ’์˜ ํŒฉํ† ๋ฆฌ์–ผ ๊ฐ’๋งŒํผ์€ ์•ˆ๊ณฑํ•˜๊ณ  ๊ทธ ๋’ค์— ์ˆ˜๋ถ€ํ„ฐ N๊นŒ์ง€ ๊ตฌํ•œ ๋’ค, ๋‚˜๋จธ์ง€ ๋ถ„๋ชจ์˜ ํŒฉํ† ๋ฆฌ์–ผ ๊ฐ’์„ ๊ตฌํ•ด์„œ ๋‚˜๋ˆ„๋ฉด ๋” ๋น ๋ฅผ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. 
  • ์˜ˆ๋ฅผ ๋“ค์–ด (5 3)์ด๋ฉด ์‹์ด (5! / (3! * 2!)์ผ ๊ฒƒ์ธ๋ฐ 3์ด ๋”ํฌ๋ฏ€๋กœ 5!์„ ๊ณ„์‚ฐํ•  ๋•Œ, 3!๋งŒํผ ์•ˆ ๊ณฑํ•ด์ฃผ๊ณ  ๋ถ„๋ชจ์— ์žˆ๋Š” 3!์„ ์—†์• ์ฃผ๋ฉด ๋œ๋‹ค. (1*2*3*4*5 / (1*2*3 * 2!)์ด๋ฏ€๋กœ ๊ณตํ†ต๋œ 1*2*3์„ ์—†์• ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.) ๊ทธ๋ฆฌ๊ณ  ๋‚จ์€ 4*5 / 2!๋งŒ ๊ณ„์‚ฐํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

๊ฒช์€ ์‹œํ–‰์ฐฉ์˜ค

  • X (์ฒ˜์Œ์— ๋ถ€๋“ฑํ˜ธ ์‹ค์ˆ˜๋ฅผ ํ•ด์„œ ํ•œ๋ฒˆ ํ‹€๋ ธ์ง€๋งŒ ๊ทธ๋ž˜๋„ ๋‚˜๋ฆ„ ์‰ฝ๊ฒŒ ํ’€์—ˆ๋‹ค ใ…Žใ…Ž)

ใ…Žใ…Ž

์ฝ”๋“œ

import java.util.*;
import java.io.*;

public class BOJ11050 {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());

        // ์กฐํ•ฉ์„ ๊ตฌํ• ๋•Œ N! / (K! * (N-K)!)์ด๋ฏ€๋กœ
        int K2 = N - K;
        // ๊ฒฐ๊ณผ๊ฐ’ ์ €์žฅํ•  ๋ณ€์ˆ˜
        int result = 1;
        // ํŒฉํ† ๋ฆฌ์–ผ ๊ณฑํ•œ ๊ฐ’ ๊ตฌํ•  ๋ณ€์ˆ˜
        int mul = 1;

        // ์กฐํ•ฉ์„ ๊ตฌํ• ๋•Œ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด K!๊ณผ (N-K)!์ด๋ฏ€๋กœ ๋” ํฐ์ชฝ์„ ๊ธฐ์ค€์œผ๋กœ
        if(K >= K2){
            // ํŒฉํ† ๋ฆฌ์–ผ์ด 1๋ถ€ํ„ฐ ํ•ด๋‹น ์ˆ˜๊นŒ์ง€ ๋ชจ๋‘ ๊ณฑํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—
            // ์–ด์ฐจํ”ผ ๋‚˜๋ˆ ์•ผ ๋  ์ˆ˜๋ผ๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ ์•ˆ๊ณฑํ•˜๋„๋ก
            // ๋” ํฐ์ˆ˜๋ณด๋‹ค ํฐ์ˆ˜๋ถ€ํ„ฐ N๊นŒ์ง€ ๊ณฑํ•ด์„œ ์ €์žฅ
            for(int i = (K + 1); i <= N; i++){
                result = result * i;
            }

            // ๋‚˜๋จธ์ง€ ์ž‘์€ ๊ฐ’์„ ํŒฉํ† ๋ฆฌ์–ผ ๊ณ„์‚ฐํ•ด์คŒ
            for(int i = 1; i <= K2; i++){
                mul = mul * i;
            }

            // ์œ„์— ๊ณฑํ•œ์ˆ˜๋ฅผ ์ž‘์€ ๊ฐ’์„ ํŒฉํ† ๋ฆฌ์–ผ ๊ณ„์‚ฐํ•œ ๊ฐ’์œผ๋กœ ๋‚˜๋ˆ ์คŒ
            result = result / mul;
        }

        // ์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹
        if(K2 > K){
            for(int i = (K2 + 1); i <= N; i++){
                result = result * i;
            }

            for(int i = 1; i <= K; i++){
                mul = mul * i;
            }

            result = result / mul;
        }

        System.out.println(result);
    }
}