Skip to content

[백준] 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()

Reference