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

Algorithm

[Algorithm/Java][๋ฐฑ์ค€] 2775๋ฒˆ ๋ถ€๋…€ํšŒ์žฅ์ด ๋ ํ…Œ์•ผ

๋ฐ˜์‘ํ˜•

[BOJ] 2775๋ฒˆ ๋ถ€๋…€ํšŒ์žฅ์ด ๋ ํ…Œ์•ผ

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

๋ฌธ์ œ ์ ‘๊ทผ

๋ฐฑ์ค€์—์„œ ์—์ œ๋กœ ์ค€ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์„ ํ•˜๋‚˜์”ฉ ์“ฐ๋‹ค๋ณด๋ฉด ๊ทœ์น™์ด ๋ณด์ด๊ฒŒ ๋œ๋‹ค.
000 -> 0
001 -> 1
002 -> 2
003 -> 3
100 -> 0
101 -> 1
102 -> 3
103 -> 6
200 -> 0
201 -> 1
202 -> 4
203 -> 10
์ด๋•Œ 103ํ˜ธ์—๋Š” 003ํ˜ธ์™€ 102ํ˜ธ๋ฅผ ํ•ฉ์นœ ๊ฐ’์ด ์žˆ๊ณ , 203ํ˜ธ์—๋Š” 103ํ˜ธ์™€ 202ํ˜ธ๋ฅผ ํ•ฉ์นœ ๊ฐ’์ด ์žˆ๋‹ค.
์ด๋ฅผ ์ ํ™”์‹์œผ๋กœ ๋ฐ”๊ฟ”๋ณด๋ฉด (k0n)ํ˜ธ = k-10nํ˜ธ + k0n-1ํ˜ธ
์ฝ”๋“œ๋กœ ๋ฐ”๊ฟ”๋ณด๋ฉด dp[floor][room] = dp[foor-1][n] + dp[floor][n-1]์ด ๋œ๋‹ค. ์ด๋ฅผ ์ฝ”๋“œ๋กœ ๋ฐ”๊พธ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

Code

import java.io.*;

public class BOJ2775 {
    static int[][] dp = new int[15][15];
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();
        int T;
        T = Integer.parseInt(br.readLine());
        while (0 < T--){
            int k,n;
            k = Integer.parseInt(br.readLine());
            n = Integer.parseInt(br.readLine());
            sb.append(getPeopleCount(k, n) + "\n");
        }
        bw.write(sb.toString());
        bw.flush();
        bw.close();
        br.close();
    }
    public static int getPeopleCount(int floor, int room){
        for (int i = 0; i <= floor; i++) {
            for (int j = 1; j <= room; j++) {
                if(dp[i][j] != 0){
                    continue;
                }
                if (i == 0)
                {
                    dp[i][j] = j;
                }
                else
                {
                    dp[i][j] = dp[i-1][j] + dp[i][j-1];
                }
            }
        }
        return dp[floor][room];
    }
}
๋ฐ˜์‘ํ˜•