[백준 2775] 부녀회장이 될테야

권한·2026년 2월 28일

BOJ

목록 보기
37/40

a층의 b호에 살기 위해서 (a-1)층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살아야한다는 규칙이있다. 아파트는 0층부터 존재하며 각 층은 1호부터 있고, 0층의 i호에는 i명이 산다.

문제에 따르면
아래층의 1호부터 b호까지 사는 사람의 수만큼 윗층 b호에서 산다는 소리다.

0층 | 1 2 3 4 ... i
1층 | 1 3 6 10 ...
2층 | 1 4 10 ...
처럼 살아야 한다.

for _ in range(int(input())):
    k = int(input()) 
    n = int(input()) 

    apt = [[i for i in range(1, n + 1)]] #0층 j호에는 j명이 산다
    for i in range(k):
        floor = []
        for j in range(1, n + 1): 
            floor.append(sum(apt[i][:j]))
        apt.append(floor)
    print(apt[k][n - 1])

매번 sum()을 호출하기 때문에 비효율적이다.
이전 호수의 값에 아래층 같은 호수의 값을 더하는 방법이 있다.

for _ in range(int(input())):
    k = int(input()) 
    n = int(input()) 

    floor = [i for i in range(1, n + 1)] 

    for _ in range(k):
        for i in range(1, n):  #1호는 어차피 계속 1명임 
            floor[i] += floor[i - 1] 
    print(floor[n - 1])
profile
티스토리로 옮김

0개의 댓글