[백준] 2775. 부녀회장이 될테야
"a층의 b호에 살려면 자신의 아래(a-1)층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살아야 한다"는 계약 조항이 있는 아파트가 있다.
이 아파트에 비어있는 집은 없고 모든 거주민들이 이 계약 조건을 지키고 왔다고 가정했을 때, 주어지는 양의 정수 k와 n에 대해 k층에 n호에는 몇 명이 살고 있는지 출력하라. 단, 아파트에는 0층부터 있고 각층에는 1호부터 있으며, 0층의 i호에는 i명이 산다.
우선 1층을 기본으로 만들어준 이후에 한 층, 한 호실씩 추가하면서 숫자를 추가해주면 쉽게 풀이할 수 있다.
def floor():
a, b = int(input()), int(input()) + 1
f = [[i for i in range(1, b)]]
for _ in range(a):
f.append(list(sum(f[-1][:i]) for i in range(1, b)))
print(f[-1][-1])
for _ in range(int(input())):
floor()
특정 호실에 사는 사람의 수는 자기 앞 호실에 사는 사람의 수와 같은 호실 아래층에 사는 사람의 수를 더한 값과 같다는 점을 활용하면 아래와 같이 풀이할 수 있다. 성능도 이쪽이 더 좋은 것 같다.
def people(f, j):
f[j] += f[j - 1]
def floor():
a, b = int(input()), int(input())
f = [i for i in range(1, b + 1)]
for _ in range(a):
for j in range(1, b):
people(f, j)
print(f[-1])
for _ in range(int(input())):
floor()