๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

[๋ฐฑ์ค€/1010/๋‹ค๋ฆฌ ๋†“๊ธฐ]

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2024. 3. 19.

https://www.acmicpc.net/problem/1010

 

1010๋ฒˆ: ๋‹ค๋ฆฌ ๋†“๊ธฐ

์ž…๋ ฅ์˜ ์ฒซ ์ค„์—๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ทธ ๋‹ค์Œ ์ค„๋ถ€ํ„ฐ ๊ฐ๊ฐ์˜ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์— ๋Œ€ํ•ด ๊ฐ•์˜ ์„œ์ชฝ๊ณผ ๋™์ชฝ์— ์žˆ๋Š” ์‚ฌ์ดํŠธ์˜ ๊ฐœ์ˆ˜ ์ •์ˆ˜ N, M (0 < N ≤ M < 30)์ด ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net

 

 

<<ํ’€์ด>>

 

์ด ๋ฌธ์ œ๋Š” DFS๋กœ ํ’€์—ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋Š”๋ฐ ๋ฉ”๋ชจ์ œ์ด์…˜์„ ํ™œ์šฉํ•œ๋‹ค๋ฉด ์ด๋ฅผ ๊ทน๋ณตํ•  ์ˆ˜ ์žˆ๊ณ  ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๋‚ด๊ฐ€ ๋‹ค๋ฆฌ๊ฐ€ ๋†“์•„์งˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๊ฐฏ์ˆ˜๋ฅผ ํ™•์ธ ์•ˆ ํ•˜๊ณ  ๋ฌด์ž‘์ • ๋†’๊ฒŒ ์žก์•„์„œ ์ƒ๊ธด ๋ฌธ์ œ์ด๋‹ค. ์ด๋Ÿฐ ๋ถ€๋ถ„๋งŒ ์กฐ์‹ฌํ•˜๋ฉด ๋ฐ”๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค!!

 

๋ฉ”๋ชจ์ œ์ด์…˜์„ ํ™œ์šฉํ•  ๋•Œ ์กฐํ•ฉ์ณ๋Ÿผ nCr ์— ํŠน์ • n, r์ผ ๋•Œ์˜ ๊ฐ’์„ ์ €์žฅํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด์ค‘๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•ด์„œ ๋ฉ”๋ชจ์ œ์ด์…˜์„ ํ™œ์šฉํ–ˆ๋‹ค.

 

์™ธ์—๋Š” ์กฐํ•ฉ์„ ํ’€๊ธฐ ์œ„ํ•œ ์ •ํ˜•์ ์ธ ๋ฐฉ์‹์ด๋‹ค !!

 

nCr = n-1Cr + n-1Cr-1

 

์ด ๊ณต์‹์„ ์ž˜ ๊ธฐ์–ตํ•ด๋‘์ž!

import java.util.Scanner;

class Data {
    int a;
    int b;
    public Data(int a, int b) {
        this.a = a;
        this.b = b;
    }
}
class Main {
    public static int[][] ch = new int[50][50];

    private int DFS(int b, int a, int n) {
        if (ch[b][a] > 0) return ch[b][a];
        for (int i = 0; i < n; i++) {
            if (b == a || a == 0) return 1;
            else return ch[b][a] = DFS(b - 1, a - 1, n) + DFS(b - 1, a, n);
        }
        return -1;
    }


    public static void main (String[] args) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        Data[] data = new Data[n];
        for (int i = 0; i < n; i++) {
            data[i] = new Data(in.nextInt(), in.nextInt());
        }
        for (int i = 0; i < n; i++) {
            System.out.println(T.DFS(data[i].b, data[i].a, n));
        }

    }
}

๋Œ“๊ธ€