Problem_Solving

백준(BOJ) 2775 : 부녀회장이 될테야 (자바, JAVA)

CONCAT 2023. 12. 29. 13:36
728x90
 

2775번: 부녀회장이 될테야

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

www.acmicpc.net

설계

  • 주어진 층(k)과 호(n)에 살아야 하는 사람 수를 계산하는 문제를 해결.
  • 각 층의 각 호에 필요한 사람 수는 그 아래 층의 1호부터 해당 호까지 사는 사람들의 합과 같음.
  • 0층의 i호에는 i명이 살고 있으므로, 이 정보를 시작으로 각 층과 호에 대해 필요한 사람 수를 계산해 나감.
  • guess 함수는 이러한 계산 과정을 반복하여 k층 n호에 필요한 사람 수를 구하고 반환.

구현

코드

// package boj2775; // 패키지 선언

import java.util.Arrays; // Arrays 클래스 사용을 위한 import
import java.util.Scanner; // Scanner 클래스 사용을 위한 import
import java.util.stream.IntStream; // IntStream 클래스 사용을 위한 import

public class Main {

    // 메인 메소드
    public static void main(String[] args) {
        // 사용자 입력을 받기 위한 Scanner 객체 생성
        Scanner scanner = new Scanner(System.in);
        int T = scanner.nextInt(); // 테스트 케이스의 수 T 입력
        // 각 테스트 케이스에 대한 처리
        for (int i = 0; i < T; i++) {
            int k = scanner.nextInt(); // 층
            int n = scanner.nextInt(); // 호
            // System.out.print(k + " "); // 층 출력
            // System.out.println(n); // 호 출력
            // k층 n호에 살기 위해 필요한 사람 수를 계산하여 출력
            System.out.println(guess(k, n));
        }
        scanner.close(); // Scanner 객체 닫기
    }

    // k층 n호에 필요한 사람 수를 계산하는 메소드
    public static int guess(int k, int n) {
        // 0층에 사는 사람들 초기화 (0층 i호에는 i명이 산다)
        int arr[] = IntStream.range(0, n + 1).toArray(); 
        int temp[]; // 임시 배열 선언
        // k층까지 사람 수 계산
        for (int i = 0; i < k; i++) {
            temp = new int[n + 1]; // 임시 배열 초기화
            // System.out.println(i); // 현재 층 출력
            // System.out.println(Arrays.toString(arr)); // 현재 층의 사람 수 출력
            // 각 호에 필요한 사람 수 계산
            for (int j = 0; j <= n; j++) {
                // 아래층의 1호부터 현재 호까지 사람들의 수의 합 계산
                for (int v : Arrays.copyOfRange(arr, 1, j + 1)) {
                    temp[j] += v;
                }
            }
            // System.out.println(Arrays.toString(temp)); // 다음 층의 사람 수 출력
            arr = temp.clone(); // 계산된 사람 수를 arr에 복사
        }
        return arr[n]; // k층 n호에 필요한 사람 수 반환
    }
}