알고리즘, SQL/알고리즘

백준 2775번 : 부녀회장이 될테야

킹갓홍 2023. 12. 23. 23:54

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

 

2775번: 부녀회장이 될테야

첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다

www.acmicpc.net

문제를 보면서 공식을 찾아보려고 메모장 켜서 일부를 그려보니까 공식따위는 존재하지 않는듯 했다.

층/호 1호 2호 3호 4호 5호 6호
5층 1 7 28 84 210 462
4층 1 6 21 56 126 252
3층 1 5 15 35 70 126
2층 1 4 10 20 35 56
1층 1 3 6 10 15 21
0층 1 2 3 4 5 6

그래서 머리 좀 굴리다가..사람들 풀이를 살짝 참고해보니,

제한란에 k와n에 해당하는 값이 1이상 14이하로 값이 그렇게 많지 않을 것을 활용했었다.

그것을 참고해서 크키가 14,14인 배열을 만들어서 값을 다 넣어 놓은 후에 k와n에 해당하는 값을 출력해주는 식으로 풀었다.

public class Main {
    public static void main(String args[]) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int T = Integer.parseInt(br.readLine()); //TestCase 반복 횟수

        int[][] arr = new int[15][15];  // 14*14의 값을 넣어줄 배열생성

        //배열에 기본 정보 넣어주기
        for(int i=0; i<15; i++) {
            arr[i][1] = 1; //각 층 1호에 입력될 인원 1
            arr[0][i] = i; //0층은 각 호에 인원이 1씩 증가
        }

        //배열에 값 넣어주기
        //i층 j호의 인원 = i-1층 j호의 인원 + i층 j-1호의 인원
        for(int i=1; i<15; i++) {
            for(int j=2; j<15; j++) {
                arr[i][j] = arr[i-1][j] + arr[i][j-1];

            }
        }

        //입력된 N층 K호의 값 테스트케이스 수 만큼 출력해주기
        for(int i=0; i<T; i++) {
            int N = Integer.parseInt(br.readLine());
            int K = Integer.parseInt(br.readLine());

            sb.append(arr[N][K]+"\n");
        }
        System.out.println(sb);

    }
}