문제2775
문제
https://www.acmicpc.net/problem/2775
풀이
층과 호수가 있는 아파트를 2차원로 볼 수 있다
0층에는 i호는 i명이 살도록 저장하고
1층에는 아랫층(k - 1)의 1호(index 0)에서 n호수까지 값을 더하면
현재 k층, n호의 사람수를 구할 수 있다
층, 호 입력은 14층 까지 받으므로 15x15로 만들어야 한다
Source
import java.util.Scanner;
public class Main {
final static int MAX_ROW = 15; //층
final static int MAX_COL = 15; //호
static int[][] arr = new int[MAX_ROW][];
public static void main(String[] args) {
for(int row = 0; row < MAX_ROW; ++row) // 배열초기화
arr[row] = new int[MAX_COL];
for(int row = 1; row < MAX_ROW; ++row) // 1층 정보만 넣어주기
arr[0][row] = row;
for(int row = 1; row < MAX_ROW; ++row) // 값넣어주기, 층
for(int col = 1; col < MAX_ROW; ++col)// 호
for(int i = 0; i <= col; ++i) // 처음~계산하는 호수 까지 값 계속 더하기
arr[row][col] += arr[row-1][i];
Scanner sc = new Scanner(System.in);
final int roop = sc.nextInt();
int[][] test = new int[roop][]; // k, n 값 저장
for(int i = 0; i < roop; ++i){
test[i] = new int[2];
test[i][0] = sc.nextInt(); // 층
test[i][1] = sc.nextInt(); // 호
}
for(int i = 0; i < roop; ++i){
int k = test[i][0];
int n = test[i][1];
System.out.println(arr[k][n]);
}
}
}
재귀함수로 각 사람인원 수 저장하는 소스
import java.util.Scanner;
public class Main {
final static int MAX_ROW = 15; // 층 유저가 14층. 14호를 입력할 수 있으므로 15x15로 생성해야한다
final static int MAX_COL = 15; // 호
static int[][] arr = new int[MAX_ROW][];
public static int GetValue(int col, int row, int index, int sum) {
if (col + 1 == index) {
return sum;
}
sum += arr[row][index];
return GetValue(col, row, index + 1, sum);
}
public static void main(String[] args) {
for (int row = 0; row < MAX_ROW; ++row) // 배열초기화
arr[row] = new int[MAX_COL];
for (int row = 1; row < MAX_ROW; ++row) // 1층 정보만 넣어주기
arr[0][row] = row;
for (int row = 1; row < MAX_ROW; ++row) // 값넣어주기, 층
for (int col = 1; col < MAX_ROW; ++col) { // 호
arr[row][col] = GetValue(col, row - 1, 0, 0);
}
Scanner sc = new Scanner(System.in);
final int roop = sc.nextInt();
int[][] test = new int[roop][]; // k, n 값 저장
for (int i = 0; i < roop; ++i) {
test[i] = new int[2];
test[i][0] = sc.nextInt(); // 층
test[i][1] = sc.nextInt(); // 호
}
for (int i = 0; i < roop; ++i) {
int k = test[i][0];
int n = test[i][1];
System.out.println(arr[k][n]);
}
}
}