백준 2775번 규칙찾기/부녀회장이 될테야
2019. 1. 17. 16:25ㆍProgramming/Algorithm
반응형
문제: 부녀회장이 될테야
질문글에서 다른사람들의 공식을 보고 풀었다. ㅠㅡㅜ) 데이터를 미리 만들어놔도 된다는 생각을 하지 못했던게 가장 큰 문제.
다음과 같은 방법으로 채워짐을 알 수 있다.
K층 | … | … | … | … | … | … | … | … | … | … | (k-1층의 n호실)+(k층의 n-1호실) |
---|---|---|---|---|---|---|---|---|---|---|---|
2층 | 01 | 04 | 10 | 20 | 35 | 56 | 84 | 120 | 165 | 220 | … |
1층 | 01 | 03 | 06 | 10 | 15 | 21 | 28 | 36 | 45 | 55 | … |
0층 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | … |
이를 입력값의 범위는 1<=k<=14, 1<=n<=14이지만, 0층이 존재하므로 층의 갯수는 총 15개가 된다. 따라서 아파트 전체의 결과값을 계산하기 위해서는, 15*14사이즈의 배열에 초기화해주면 된다. 이후 배열이 초기화된 이후, k값과 n값을 입력받으면 k열의 n-1행을 출력하면 된다.
코드로 구현한 내용은 다음과 같다.
#include <stdio.h>
#define max_k 15
#define max_n 14
int main()
{
int array_apart[max_k][max_n] = {0, };
int index_n=0, index_k=0;
int count_testcase = 0;
int input_n=0, input_k=0;
for(index_k=0; index_k<max_k; index_k++) {
for(index_n=0; index_n<max_n; index_n++) {
if (index_n == 0) {
array_apart[index_k][index_n] = 1;
} else if(index_k == 0) {
array_apart[index_k][index_n] = (index_n+1);
// } else if(index_k == 1) {
// array_apart[index_k][index_n] = ((index_n+1)*(index_n+2))/2;
} else {
array_apart[index_k][index_n] = array_apart[index_k-1][index_n]+array_apart[index_k][index_n-1];
}
}
}
scanf("%d", &count_testcase);
while(count_testcase>0) {
input_n=0, input_k=0;
scanf("%d", &input_k);
scanf("%d", &input_n);
printf("%d\n", array_apart[input_k][input_n-1]);
count_testcase--;
}
return 0;
}
처음에는 배열에 값을 미리 계산해놓는다는 생각을 못해서, 질문글을 찾아봤다. 한번 풀어봤으니까 비슷한 유형의 문제가 나오면, 미리 계산해놓으면 되겠다는 생각이 바로 떠오…르겠지…?
반응형
'Programming > Algorithm' 카테고리의 다른 글
[Programmers/sort] H-index (0) | 2020.10.18 |
---|---|
백준 1924번 규칙찾기/2007년 (0) | 2019.01.17 |
백준 10250번 규칙찾기/ACM 호텔 (0) | 2019.01.16 |
백준 1011번 규칙찾기/Fly me to the Alpha Centauri (0) | 2019.01.15 |
백준 1193번 규칙찾기/분수찾기 (0) | 2019.01.14 |