알고리즘/백준 알고리즘

[백준] 2775 - 부녀회장이 될테야

TIM_0529 2023. 1. 6. 16:11
반응형
#include <iostream>
#include <cstring>
#pragma warning(disable:4996)
using namespace std;


/**
4   1 06 21 56 126 252
3	1 05 15 35 70  126
2	1 04 10 20 35  56
1	1 03 06 10 15  21
0	1 02 03 04 05  06
*/

/**
4   1 06 21 56 126 252
3	1 05           126
2	1 04
1	1 03 06 10 15  21
0	1 02 03 04 05  06
*/

using namespace std;

int GetSize(int k, int n)
{
    if (n == 1)
        return 1;
    else if (k == 0)
        return n;
    else if (n == 2)
        return k + 2;
    else if (k == 1)
        return n * (n + 1) / 2;
   
    return (GetSize(k - 1, n) + GetSize(k, n - 1));
}

int main() {
    int t, k, n;
    cin >> t;
    while (t>0)
    {
        cin >> k;
        cin >> n;
        cout<<GetSize(k, n)<<endl;
        t--;
    }
}

언어: C++

시간: 52ms

풀이:

k = 층

n = 호수 

라고 할 떄

각 층에 필요한 인원수는 (k , n-1) + (-k, n) 입니다. 재귀함수를 통해 필요한 수가 나올때 까지 반복을 돌립니다. 여기서 시간을 최대한 줄이기 위해 1 층일 떄는 가우스 공식을 이용해서 값을 바로 리턴하고 호수가 1 호면 1 , 2 호면 층 수 +2 를 리턴하도록 해서 시간을 단축하려고 시도했습니다.

 

 구하는 수에 규칙을 발견하긴 했지만, 재귀함수로 간단하게 풀 수 있었던 것을 너무 오래 고민한 것 같습니다.

 


다른사람 풀이입니다.

#include <stdio.h>

int apartment[15][15];
int Testcase_answer[100];
int main() {
	int Testcase;
	for (int i = 1; i <= 14; i++) {
		apartment[0][i] = i;
		apartment[i][1] = 1;
	}
	for (int a = 1; a <= 14; a++) {
		for (int b = 2; b <= 14; b++) {
			apartment[a][b] = apartment[a][b - 1] + apartment[a - 1][b];
		}
	}
	scanf("%d", &Testcase);
	for (int i = 1; i <= Testcase; i++) {
		int Floor, Digit;
		scanf("%d %d", &Floor, &Digit);
		Testcase_answer[i] = apartment[Floor][Digit];
	}
	for (int i = 1; i <= Testcase; i++) {
		printf("%d\n",Testcase_answer[i]);
	}
	return 0;

}

언어: C++ 14

시간: 0ms

풀이해설: 층 수를 입력 받기 전에 2차원 배열에 모두 저장해 놓고 입력값을 받은 후 바로 배열에 저장된 값을 출려하는 방식으로 구현하셨습니다. 처음에 2차원 배열을 사용해서 모든 층을 저장하려고 했지만 호수는 14 까지 제한이 되어 있고 층 수는 제한이 없는것으로 봐서 시도하지 않았는데 14 층 까지 제한이였다는 것을 다른사람 코드르 보면서 깨달았습니다. 

반응형

'알고리즘 > 백준 알고리즘' 카테고리의 다른 글

14681 - 사분면 고르기  (1) 2023.01.08
[백준] 2753 - 윤년  (0) 2023.01.07
[백준] 9498 - 시험성적  (0) 2023.01.05
[백준] 1330 - 두 수 비교하기  (0) 2023.01.04
[백준] 10250 - ACM 호텔  (2) 2023.01.03