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호에 필요한 사람 수 반환
}
}
'Problem_Solving' 카테고리의 다른 글
백준(BOJ) 2501 : 약수 구하기 (자바, JAVA) (0) | 2024.01.02 |
---|---|
백준(BOJ) 6603 : 로또 (자바, JAVA) (0) | 2023.12.29 |
백준(BOJ) 10973 : 이전 순열 (자바, JAVA) (1) | 2023.12.28 |
백준(BOJ) 10819 : 차이를 최대로 (자바, JAVA) (0) | 2023.12.27 |
백준(BOJ) 2529 : 부등호 (자바, JAVA) (0) | 2023.12.26 |