http://acmicpc.net/problem/2775
{코드}
for _ in range(int(input())):
k, n = int(input()), int(input())
residents = [i for i in range(1, n+1)]
for _ in range(k):
for j in range(1, n):
residents[j] += residents[j-1]
print(residents[-1])
{설명}
먼저 각 층의 1호에는 1명만 있고, 첫 번째 층(0층)에는 n호에 n명이 있습니다.
그리고 a층의 b호에 들어갈 거주민의 수는 a-1층의 b호까지의 거주민의 합과 같습니다.
즉, 0층의 거주민 리스트를 층의 갯수만큼 반복문을 돌리며 전 호의 거주민 수에 현재 저장되어 있는 거주민의 수를 더해주면 됩니다.
예시를 보며 더 설명하겠습니다.
층 | 1호 | 2호 | 3호 | 4호 | 5호 |
0 | 1 | 2 | 3 | 4 | 5 |
1 | 1 | 3 | 6 | 10 | 15 |
2 | 1 | 4 | 10 | 20 | 35 |
위의 표를 보면 1층의 1호에는 1명이 들어오고
2호부터는 0층의 1호+0층의 2호,
3호는 0층의 1호+0층의 2호+0층의 3호....와 같은 순서를 가지고 있음을 알 수 있습니다.
근데 3호를 구하기 위해 필요한 0층의 1호와 0층의 2호는 결국 1층의 2호의 값과 같으므로 1층의 2호에 현재 저장된 값인 0층의 3호를 더하면 되는 것입니다.
'알고리즘 공부 > BOJ백준 풀이' 카테고리의 다른 글
[백준 1978번-파이썬/Python] 소수 찾기 (0) | 2020.12.17 |
---|---|
[백준 1011번-파이썬/Python] Fly me to Alpha Centauri (0) | 2020.12.17 |
[백준 10250번-파이썬/Python] ACM 호텔 (0) | 2020.10.31 |
[백준 2869번-파이썬/Python] 달팽이는 올라가고 싶다 (0) | 2020.10.31 |
[백준 1193번-파이썬/Python] 분수 찾기 (0) | 2020.10.17 |