728x90

문제

평소 반상회에 참석하는 것을 좋아하는 주희는 이번 기회에 부녀회장이 되고 싶어 각 층의 사람들을 불러 모아 반상회를 주최하려고 한다.

이 아파트에 거주를 하려면 조건이 있는데, “a층의 b호에 살려면 자신의 아래(a-1)층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살아야 한다” 는 계약 조항을 꼭 지키고 들어와야 한다.

아파트에 비어있는 집은 없고 모든 거주민들이 이 계약 조건을 지키고 왔다고 가정했을 때, 주어지는 양의 정수 k와 n에 대해 k층에 n호에는 몇 명이 살고 있는지 출력하라. 단, 아파트에는 0층부터 있고 각층에는 1호부터 있으며, 0층의 i호에는 i명이 산다.

 

입력

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

 

출력

각각의 Test case에 대해서 해당 집에 거주민 수를 출력하라.

 

제한

  • 1 ≤ k, n ≤ 14

 

예제 입력 1

2
1
3
2
3

 

예제 출력 1

6
10

 

알고리즘 분류

  • 수하
  • 구현
  • 다이나믹 프로그래밍

 

문제 출처

https://www.acmicpc.net/problem/2775

 

2775번: 부녀회장이 될테야

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

www.acmicpc.net

 

문제 해결 방법

  • 문제의 규칙을 발견하면 쉽게 풀 수 있는 문제였다.
  • 아파트의 크기가 14 x 14 로 비교적 작아 2차원 배열을 생성한 후, 각 호의 인원을 계산해서 각 배열의 요소에 넣고, 입력 받은 k와 n의 값에 따라 해당 배열에 있는 요소를 출력시키는 방법으로 문제를 해결하였다.
... ... ... ... ... ...
1층 1 1 + 2 1 + 2 + 3 1 + 2 + 3 + 4 ...
0층 1 2 3 4 ...
  1호 2호 3호 4호 ...

 

코드

#include <iostream>
using namespace std;

int T, k, n, apt[15][15], sum;

// ...
// [1][3][6][10]...[1 + 2 + 3 + ... + 14]
// [1][2][3][4][5][6][7][8][9][10][11][12][13][14]

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    for (int i = 0; i < 15; i++) {
        apt[0][i] = i + 1;
    }

    for (int i = 1; i < 15; i++) {
        for (int j = 0; j < 15; j++) {
            sum = 0;
            for (int k = 0; k <= j; k++) {
                sum += apt[i - 1][k];
            }
            apt[i][j] = sum;
        }
    }

    cin >> T;

    for (int i = 0; i < T; i++) {
        cin >> k;
        cin >> n;

        cout << apt[k][n - 1] << '\n';
    }

    return 0;
}

 

채점 결과

 

참고

  • [단계별로 풀어보기] > [기본 수학 1]
  • 브론즈I
728x90

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ-11653][C++] 소인수분해  (0) 2022.10.25
[BOJ-2581][C++] 소수  (0) 2022.10.25
[BOJ-1978][C++] 소수 찾기  (0) 2022.10.25
[BOJ-2830][C++] 설탕 배달  (0) 2022.10.24
[BOJ-10250][C++] ACM 호텔  (0) 2022.10.24
[BOJ-2869][C++] 달팽이는 올라가고 싶다  (0) 2022.10.24
[BOJ-1193][C++] 분수찾기  (0) 2022.10.24
[BOJ-2563][C++] 색종이  (0) 2022.10.24