/* a층의 b 호에 살려면 자신의 아래 층에 1호부터 b 까지 사람들의 수의 합만큼 사람들을 데려와 살아야 합니다. 양의 정수 케이와 엔에 대해 케이층에 엔호에는 몇 명이 살고 있는지 출력합니다. 0층부터있고 각층에는 1호부터 있으며 0층에 아이호는 아이명이삽니다. 1층의 3호에는 6명? 0층 1 2 3 이니 6명입니다. 2층의 3에는 1 4 10 20 35 56 1 3 6 10 15 21 28 36 45 55 66 78 91 105 1 2 3 4 5 6 7 8 9 10 11 12 13 14 이런 수열의 규칙을 어떻게 만들 수 있을까요? 수열의 규칙을 어떻게 만들지? 0층은 그냥 그렇다 치고, 이것을 14 바이 14에 대해서 모두 만들어 두어야 하는 것인가? 128 메모리 사용가능합니까. 포문으로 여러개 만들면 되겠습니다. 일단 14바이를 다 만들어 두어야 하는 것인가요? 어떻게 해야하지?? 14바이 14만들어 보겠습니다. 이렇게 행렬이 만들어져 갑니다 오케이요. 행렬을 만들어보아요. 행렬을 만들어봅시다. 행렬을 만들어 보아요. 오케이 1층에서 3호를 받으면? 1층에서 3호를 받으면? 1층에서 3호를 받으면 하나를 예로 들어서 만들어보도록 하겠습니다. 1, 3을 받으면 이런식으로 되고, 14, 14를 받는 것이 최대입니다. 그러므로, 14 14에 대한 수열을 찾아야 겠습니다. 1 3 이 들어가야하는데 */ #include <iostream> using namespace std; int k, n; int apa[15][14] = { 0 }; /* 왜 j가 안들어와지지? j=1 해서 1층에 대한 것들을 했고, 일단 인덱스를 i, j로 변경해겠습니다 */ void problemIn() {
int sum = 0; for (int i = 0; i < 14; i++) { apa[0][i] = i + 1; }
for (int i = 1; i < 15; i++) { sum = 0; for (int j = 0; j < 14; j++) { sum += apa[i-1][j]; apa[i][j] = sum; } } cin >> k >> n; } void solve() { cout << apa[k][n - 1] << endl; } int main(void) { int T; cin >> T; for (int i = 0; i < T; i++) { problemIn(); solve(); } return 0; } |
14 바이 14 일부러 이렇게 행렬을 만들고 풀이하라는 것인가? 이렇게 계산을 미리해두는 것이 좋을까? 아니면 메모리를 먼저 할당하지 않고, 원하는 값까지만 계산하는게 좋은까? 만약에 주어지는 메모리 할당량이 작으면 작으면 그렇게 하는데 128 까지 주어지므로, 괜찮다. 지금까지 문제들에서는 메모리 때문에 막히는 경우는 없었으므로, 그리고 주어진 예제에서 모두 맞았는데, 제출했을 때 틀리면, 주어진 조건 값들을 다시 살펴보도록 합니다. 이번 경우에 0층 부터 13층으로 생각하고 풀었는데 0층부터 14층이었습니다. |