์ฝ”๋”ฉํ…Œ์ŠคํŠธ

[DFS] 7. ์กฐํ•ฉ์˜ ๊ฒฝ์šฐ์ˆ˜(๋ฉ”๋ชจ์ด์ œ์ด์…˜)

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2024. 2. 26. 08:15

<<ํ’€์ด>>

 

์šฐ์„  ๊ตฌํ˜„ ์ž์ฒด๋Š” ์–ด๋ ต์ง€ ์•Š๊ฒŒ DFS๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ตฌํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ..

 

๋ฒ”์œ„ ์ดˆ๊ณผ๋กœ ์ธํ•ด ๊ณ„์† ํฐ ๊ฐ’๋“ค์€ ๊ณ„์‚ฐ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ๋‹ค..

 

๊ทธ๋ž˜์„œ ์˜ˆ์ „์— ํ•œ ๋ฒˆ ๋ดค๋˜ BigInteger๊ฐ€ ์ƒ๊ฐ์ด๋‚˜์„œ ์‹œ๋„ ํ•ด๋ดค๋‹ค.

import java.io.BufferedReader;
import java.io.InputStreamReader;

class Main {
    private Long DFS(Long num) {
        Long answer = num;
        if (num == 1) return answer;
        else {
            answer = answer * DFS(num - 1);
        }
        return answer;
    }

    public static void main(String[] args) throws Exception{
        Main T = new Main();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] arr = br.readLine().split(" ");
        Long n = Long.parseLong(arr[0]);
        Long r = Long.parseLong(arr[1]);

        System.out.println(T.DFS(n) / (T.DFS(n - r) * T.DFS(r)));
    }
}

 

 

๋ฐ”๋กœ ์ด ๋ฐ‘์˜ ์ฝ”๋“œ๊ฐ€ BigInteger๋ฅผ ํ™œ์šฉํ•œ ์ฝ”๋“œ์ด๋‹ค.

์ด ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์ œ๋ฅผ ๋งž์ถœ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์€ BigInteger๋ฅผ ํ™œ์šฉํ•œ๋‹ค๋ฉด. ์ผ๋ฐ˜ ์—ฐ์‚ฐ์ž ==, >=, +, * ๋“ฑ์„ ํ™œ์šฉํ•  ์ˆ˜ ์—†๊ณ 

.equals, .multiply, .subtract์ฒ˜๋Ÿผ ํ•ด์•ผ ์ด์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค ใ…‹ใ…‹

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigInteger;

class Main {
    private BigInteger DFS(BigInteger num) {
        BigInteger answer = num;
        if (num.equals(BigInteger.ONE)) return answer;
        else {
            answer = answer.multiply(DFS(num.subtract(BigInteger.ONE)));
        }
        return answer;
    }

    public static void main(String[] args) throws Exception{
        Main T = new Main();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] arr = br.readLine().split(" ");
        BigInteger n = new BigInteger(arr[0]);
        BigInteger r = new BigInteger(arr[1]);

        BigInteger result = T.DFS(n).divide(T.DFS(n.subtract(r)).multiply(T.DFS(r)));
        System.out.println(result);
    }
}

 

 

-๊ฐ•์‚ฌ๋‹˜ ํ’€์ด-

 

ํ™•์‹คํžˆ ๋‚ด๊ฐ€ ํ•œ ๋ฐฉ์‹ ๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ ์ธ ์ฝ”๋“œ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฉ”๋ชจ์ œ์ด์…˜์„ ํ™œ์šฉํ•ด์„œ ๊ณ„์‚ฐ ํ–ˆ๋˜ ๊ฐ’์€ ์ €์žฅํ•ด๋‘๊ณ  ํ•œ ๋ฒˆ ๋” ๋‚˜์˜ค๊ฒŒ ๋˜๋ฉด ๊บผ๋‚ด์–ด ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์ค„์˜€๋‹ค. ์กฐํ•ฉ์˜ ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์€ ์™ธ์›Œ๋‘๊ณ  ์ž˜ ์ด์šฉํ•ด๋ณด์ž!!

import java.io.BufferedReader;
import java.io.InputStreamReader;

class Main {
    int[][] dy = new int[35][35];
    private int DFS(int n, int r) {
        if (dy[n][r] > 0) return dy[n][r];
        if (n == r || r == 0) return 1;
        else return dy[n][r] = DFS(n - 1, r - 1) + DFS(n - 1, r); 
    }


    public static void main(String[] args) throws Exception{
        Main T = new Main();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int r = Integer.parseInt(br.readLine());
        System.out.println(T.DFS(n, r));

    }
}

 

<<์ถ”๊ฐ€ ๊ณต๋ถ€>>

 

BigInteger