[백준] 2275 부녀회장이 될테야 JAVA

한민욱·2024년 10월 14일

문제 설명

0층 i호에는 i명이 거주합니다.
k층 n호에는 (k-1)층의 1호부터 n호까지의 거주민 수의 합이 거주민으로 살고 있습니다.

호 수는 최대 14까지이기 때문에 2차원 배열로 15*15를 선언해준다.

// 아파트 거주민 수를 저장할 배열 (최대 14층, 14호)
        int arr[][] = new int[15][15];

0층 i호에는 i명이 산다.

for (int i = 1; i <= 14; i++) {
            arr[0][i] = i;
        }

2층 -> 1, 4, 10, 20, 35......
1층 -> 1, 3, 6, 10, 15......
0층 -> 1, 2, 3, 4, 5......

규칙이 보이지않나요? 예를 들어 2층 2호의 인원 수를 구할려면
arr[2][2] = arr[2][1] + arr[1][2]
3층 3호의 인원 수를 구할려면
arr[3][3] = arr[3][2] + arr[2][3]

코드로 나타내면

for (int k = 1; k <= 14; k++) {
            for (int n = 1; n <= 14; n++) {
                arr[k][n] = arr[k-1][n] + arr[k][n-1];
            }
        }

이렇게 15*15배열을 0,0 빼고 전부 채웠어요. 0,0은 쓰이질 않으니 빼고.

입력받은 테스트 케이스를 처리해보면

for (int t = 0; t < T; t++) {
            int k = Integer.parseInt(br.readLine());  // 층 입력
            int n = Integer.parseInt(br.readLine());  // 호 입력

            bw.write(arr[k][n] + "\n");  // 결과 출력
        }

전체 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {
    
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int T = Integer.parseInt(br.readLine().trim());

        int arr[][] = new int[15][15];

        for(int i = 1; i <= 14; i++){
            arr[0][i] = i;
        }

        for(int k = 1; k <= 14; k++){
            for(int n = 1; n <= 14; n++){
                arr[k][n] = arr[k-1][n] + arr[k][n-1];
            }
        }

        for(int t = 0; t < T; t++){
            int k = Integer.parseInt(br.readLine());
            int n = Integer.parseInt(br.readLine());

            bw.write(arr[k][n] + "\n");
        }
        bw.flush();
        bw.close();
        br.close();
    }
}
profile
나날이 성장하고 싶은 백엔드 개발자

0개의 댓글