작성일 :

문제 링크

2775번 - 부녀회장이 될테야

설명

반상회를 주최하기 위해 각 층별, 호별로 사람의 수를 계산하는 문제입니다.

문제의 조건에 따르면, 각 호의 사람 수는 아래층의 같은 호의 사람수와 그 이전 호까지의 사람 수의 합과 같습니다.

따라서, 0 층의 각 호에는 호수와 같은 수의 사람이 살고 있습니다.

이후 1 층부터 시작하여, 각 층의 각 호에 사는 사람의 수를 계산합니다.

이 때, 각 호에 사는 사람의 수는 바로 아래층의 같은 호 사람 수와 그 이전 호까지 사는 모든 사람 수의 합입니다.

반복문을 활용하여 위와 같은 계산을 진행하면, 주어진 층과 호에 살고 있는 사람의 수를 계산할 수 있습니다.


Code

[ C# ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
namespace Solution {
  class Program {
    static void Main(string[] args) {

      const int MAX = 15;

      var apt = new int[MAX, MAX];

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

      for (int i = 1; i < MAX; i++) {
        for (int j = 2; j < MAX; j++)
          apt[i, j] = apt[i - 1, j] + apt[i, j - 1];
      }

      var cntCase = int.Parse(Console.ReadLine()!);
      for (int c = 0; c < cntCase; c++) {
        var floor = int.Parse(Console.ReadLine()!);
        var numRoom = int.Parse(Console.ReadLine()!);

        Console.WriteLine($"{apt[floor, numRoom]}");
      }

    }
  }
}



[ C++ ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <bits/stdc++.h>

#define MAX 15

using namespace std;

typedef vector<int> vi;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  vector<vi> apt(MAX, vi(MAX, 0));

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

  for (int i = 1; i < MAX; i++) {
    for (int j = 2; j < MAX; j++)
      apt[i][j] = apt[i - 1][j] + apt[i][j - 1];
  }

  int cntCase; cin >> cntCase;
  for (int c = 0; c < cntCase; c++) {
    int floor, numRoom; cin >> floor >> numRoom;
    cout << apt[floor][numRoom] << "\n";
  }

  return 0;
}