문제 이해하기
처음에 이 문제를 못 풀었다.
k층1호=1
k층2호=(k-1)층1호+(k-1)층2호=1+(k-1)층2호
k층3호=(k-1)층1호+(k-1)층2호+(k-1)층3호=1+(k-1)층2호+(k-1)층3호=k층2호+(k-1)층3호
이 규칙을 이용해 함수를 따로 정의해주었다.
코드로 표현하기
#include <iostream>
using namespace std;
int getNum(int a, int b) {//a층b호
if (b == 1)//1호
return 1;
if (a == 0)//0층
return b;
return (getNum(a - 1, b) + getNum(a, b - 1)); //point!
}
int main() {
int t, k, n;
cin >> t;
for (int i = 0; i < t; i++) {
cin >> k >> n;
cout << getNum(k, n) << endl;
}
}
1호는 몇 층인지에 상관없이 늘 1명,
0층은 딱 호 수가 사람 수,
그 외의 경우는 재귀함수를 이용하여 계산되게 코드화
'알고리즘' 카테고리의 다른 글
[C++] 백준 2581번: 소수 (0) | 2022.03.16 |
---|---|
[C++] 백준 1978번: 소수 찾기 (0) | 2022.03.16 |
[C++] 백준 2292번: 벌집 (0) | 2022.02.25 |
[C++] 백준 1712번: 손익분기점 (0) | 2022.02.25 |
[C++] 백준 10809번: 알파벳 찾기 (0) | 2022.02.07 |