코딩 테스트/Python

[백준 코딩테스트(Python)] 기본 수학 1 - 부녀회장이 될테야

알밤바 2022. 9. 16. 09:39
728x90
반응형

 

2775번: 부녀회장이 될테야

첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다

www.acmicpc.net


문제

평소 반상회에 참석하는 것을 좋아하는 주희는 이번 기회에 부녀회장이 되고 싶어 각 층의 사람들을 불러 모아 반상회를 주최하려고 한다.

이 아파트에 거주를 하려면 조건이 있는데, “a층의 b호에 살려면 자신의 아래(a-1)층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살아야 한다” 는 계약 조항을 꼭 지키고 들어와야 한다.

아파트에 비어있는 집은 없고 모든 거주민들이 이 계약 조건을 지키고 왔다고 가정했을 때, 주어지는 양의 정수 k와 n에 대해 k층에 n호에는 몇 명이 살고 있는지 출력하라. 단, 아파트에는 0층부터 있고 각층에는 1호부터 있으며, 0층의 i호에는 i명이 산다.

 

입력

첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다

 

출력

각각의 Test case에 대해서 해당 집에 거주민 수를 출력하라.

 

제한

1 ≤ k, n ≤ 14

 


1. 문제 접근 방식

각 층 별로 사람 수가 더해지는데에 일정한 규칙이 없다. (직접 하나씩 그려보면 확인할 수 있음)

그러므로 각 층 별로 사람 수를 더하고 사람 수가 더해진 아래 층의 정보를 활용하여 그 위의 층의 사람 수를 더할 수 있다.


0층에 대한 정보가 제공되었으므로 이것을 활용할 수 있어야 한다.

0층 사람 수를 리스트로 만든 후 매 층마다 이 리스트를 업데이트하는 방향으로 코드를 짜면 된다.

 

1) 우선 0층의 사람 수를 리스트로 만든다.

주어진 호 수(num)만큼 리스트에 추가하면 된다.

T = int(input())

for _ in range(T):
    floor = int(input())   # 층 수
    num = int(input())     # 호 수

    # 0층 리스트 만들기
    zero = []
    for i in range(1, num+1):
        zero.append(i)

 

2) 만든 0층 리스트를 주어진 층 수(floor)만큼 사람 수를 업데이트 한다.

업데이트 된 층 별 사람 수 리스트를 활용하여 다음 층의 사람 수를 업데이트할 수 있다.

for j in range(floor):
    for n in range(1, num):
        zero[n] += zero[n-1]
        
print(zero[-1])

 

층 별 사람 수 리스트(zero)의 인덱스로 호 수(num)을 활용하면 된다.

zero의 0번 인덱스는 늘 1로 동일하기에 1번 인덱스부터 num-1번 인덱스까지 차례로 이전의 수를 하나씩 더해주면 된다.

이렇게 매 층마다 업데이트된 리스트에서 가장 마지막 수가 num호이므로 마지막 수를 출력한다.

 

 

2. 풀이 코드

T = int(input())

for _ in range(T):
    floor = int(input())
    num = int(input())

    # 0층 리스트 만들기
    zero = []
    for i in range(1, num+1):
        zero.append(i)

    # floor층까지 한 층씩 사람수 업데이트
    for j in range(floor):
        for n in range(1, num):
            zero[n] += zero[n-1]

    print(zero[-1])

 

3. 참고 코드

 

백준 2775번 [파이썬 알고리즘] 부녀회장이 될테야

[Python] 백준 알고리즘 온라인 저지 2775번 : 부녀회장이 될 테야 Python3 코드 t = int(input()) for _ in range(t): floor = int(input()) # 층 num = int(input()) # 호 f0 = [x for x in range(1, num+1)..

ooyoung.tistory.com

 

 

 

728x90
반응형