2775. 부녀회장이 될테야 [JAVA]

Nak.s·2023년 1월 19일
0

CodeTest

목록 보기
12/19

k번째 층의 n번째 호수의 주민의 수는
k-1층의 1 ~ n번째 호수의 주민 수의 합이다.
아래의 예를 보면 207호의 주민수는 28이다.

1  3  6 10 15 21 28 
1  2  3  4  5  6  7

그리고 자세히 보면 k-1 층의 1 ~ n-1의 주민의합 + k-1층의 n호수 주민의 합이
k층의 n번쨰 호수이다. 혹은 k층 n-1 호수 주민 + k-1층의 n호수 주민의 합이 규칙이다.

하지만 본인은 아래와 같이 각 호수별로 주민수를 구해서
2차원 배열에 할당하여, 마지막에 해당 호수의 배열 원소를 추출하는 방법으로 풀이했다.

어차피, 위 규칙으로 구하나, 본인 방식이나 정답은 똑같지만, 코드의 간결성은
본인 방식이 더 낫다고 판단했다.

public class BJ_2775 {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int t = Integer.parseInt(br.readLine());
        while(t > 0) {
            int k = Integer.parseInt(br.readLine());
            int n = Integer.parseInt(br.readLine());

            if (k < 1 || n > 14) return;

            int[][] apt = new int[k + 1][n];     //아파트 배열 생성 / k+1 (0층 포함) 수만큼 층수 / n 수만큼 호수가 정해짐

            int i = n;                           // 0층 주민 수 초기화 1 ~ n
            while (i > 0) {
                apt[0][--i] = i + 1;
            }

            //현재 층수에 전 층수들의 합을 넣음. s = storey, n = num
            for (int s = 1; s <= k; s++) {
                int residentsSum = 0;                // s-1 층 층수의 총 주민 수 누적 합을 담는 변수
                for (int r = 0; r < n; r++) {
                    residentsSum += apt[s - 1][r];   //s-1 층 r호수의 주민 수를 residentsSum 에누적시키고,
                    apt[s][r] += residentsSum;       // s층 r호수에 삽입
                }
            }

            System.out.println(apt[k][n - 1]);       //k층 n-1호 (배열은 0부터)가 제출 응답.
            --t;
        }
    }
}
profile
궁금함이 많은 개발자

0개의 댓글