공부/백준(C++) - 2022~

백준 2775번: 부녀회장이 될테야 [C++]

상연 2022. 1. 13. 22:21

목차

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

     

    2775번: 부녀회장이 될테야

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

    www.acmicpc.net

    코드

    #include <iostream>
    using namespace std;
    
    int solution(int k, int n)
    {
    	if(k == 0 || n == 1)
    	{
    		return n;	
    	} 
    	else
    	{
    		return solution(k, n-1) + solution(k - 1, n);
    	}
    }
    
    int main() {
    	int t;
    	int k, n;
    	
    	cin >> t;
    	
    	for(int i=0; i<t; i++){
    		cin >> k >> n;
    		cout << solution(k, n) << endl;
    	}
    }

     

    설명

    어떻게든 재귀함수를 안 쓰려고 몸을 비틀어봤는데, 역시 재귀함수를 쓰는게 가장 편했던 문제였다.

    우선, 대략적으로 이 아파트에 거주하는 사람들의 수는 이렇게 된다.

    어떻게 한 집에서 129명이나 사는지는 알 수가 없지만...

    결론적으로 말하자면, K층 N호 집이라고 하면 그 집에 사는 사람의 수는

    (K-1층 N호 집 사람 수) + (K층 N-1호 집 사람수) 가 된다.

    그렇기 때문에 재귀함수를 사용해서 풀어주면 된다.