Algorithm/Baekjoon For.Java
2775 : 부녀회장이 될테야
Jinny zinny
2023. 3. 30. 10:35
https://www.acmicpc.net/problem/2775
2775번: 부녀회장이 될테야
첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다
www.acmicpc.net
누가 이거 제목 보고 웃으라고 했습니까
대답합니다
자 오늘은 부녀회장이 될 시간이다.
아파트 짱 먹는거지
원리 자체는 Dynamic Programming이다
한칸씩 한칸씩 계산해서 최종적으로 우리가 원하는 호수의 인원을 세는 것으로
Memoization 기법을 이용하면 쉽게 풀 수 있다.
201호이면 101호
202호이면 101호 + 102호
203호이면 101호 + 102호 + 103호 이런 식이다
자, 그렇다면 203호를 구하고자 할때 202호 + 203호이면 편하게 구할 수 있지 않을까?
203호 = (101호 + 102호) + 103호 = 202호+ 103호이니 말이다.
이 문제에서 현실성은 잠시 접어두고 복도식 아파트를 생각하면 편하다.
1호부터 자신의 아랫집에 있는 세대원들을 모두 합하는 문제이므로
(호수 기준)
1+2+3+4+...+b호까지의 합을 구하면 된다.
다만 이거를 일반적인 방법으로 구하고자 한다면 시간초과가 날 것이다.
Dynamic Programming에 대해서는 별도로 서술하도록 하겠다.
import java.util.*;
import java.io.*;
public class Main {
static int[][] Apartment;
static int Calculate(int floor, int HouseNumber) {
int answer=0;
for(int i=0;i<floor;i++)
{
for(int j=0;j<HouseNumber;j++)
{
Apartment[i+1][j+1]=Apartment[i+1][j]+Apartment[i][j+1];
}
}
return Apartment[floor][HouseNumber];
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for (int i = 0; i < T; i++) {
int k = sc.nextInt();
int n = sc.nextInt();
Apartment = new int[k + 1][n + 1];
for (int j = 0; j <= n; j++) {
Apartment[0][j] = j;
}
for (int j = 0; j <= k; j++) {
Apartment[j][0] = Apartment[0][0];
}
System.out.println(Calculate(k, n));
}
}
}
반응형