평소 반상회에 참석하는 것을 좋아하는 주희는 이번 기회에 부녀회장이 되고 싶어 각 층의 사람들을 불러 모아 반상회를 주최하려고 한다.
이 아파트에 거주를 하려면 조건이 있는데, “a층의 b호에 살려면 자신의 아래(a-1)층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살아야 한다” 는 계약 조항을 꼭 지키고 들어와야 한다.
아파트에 비어있는 집은 없고 모든 거주민들이 이 계약 조건을 지키고 왔다고 가정했을 때, 주어지는 양의 정수 k와 n에 대해 k층에 n호에는 몇 명이 살고 있는지 출력하라. 단, 아파트에는 0층부터 있고 각층에는 1호부터 있으며, 0층의 i호에는 i명이 산다.
import sys
T = int(sys.stdin.readline())
for _ in range(T):
k = int(sys.stdin.readline()) #층
n = int(sys.stdin.readline()) #호
count = 0
arr = [[0] * n for i in range(k+1)]
for j in range(k+1):
arr[j][0] = 1
for i in range(1,n):
temp = 0
for j in range(k+1):
temp += arr[j][i-1]
arr[j][i] = (temp + 1)
count = arr[k][n-1]
print(count)
문제의 규칙
1.각 층의 1호는 전부 1명이다.
2.구하려는 층,호의 사람 수는 이전 호수의 층별 사람 수의 합 + 1이다.
ex) 3층 3호 = 0층 2호 + 1층 2호 + 2층 2호 + 3층 2호 + 1
입력받은 k,n을 통해 2차원 리스트을 선언한다. (k는 0층부터 시작이므로, k+1)
각 층의 1호는 1명이므로 리스트의 첫번째에 전부 1을 넣어준다.
2호부터 이전 호수(i-1)의 층별 사람수를 temp에 더한다.
해당 호수(i)에 차례로 temp + 1 값을 저장한다.
k+1만큼 반복후 temp값을 0으로 초기화 한뒤 다음 호수의 리스트값을 채운다.
문제에서는 n이 1부터이므로 arr[k][n-1]값을 출력한다.