멋쟁이v의 개발일지

[백준 2775번] 부녀회장이 될테야(파이썬) 본문

0년차/알고리즘(기본 수학)

[백준 2775번] 부녀회장이 될테야(파이썬)

멋쟁이v 2022. 12. 1. 15:24
728x90
320x100
문제
평소 반상회에 참석하는 것을 좋아하는 주희는 이번 기회에 부녀회장이 되고 싶어 각 층의 사람들을 불러 모아 반상회를 주최하려고 한다.

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

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

 

입력
첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다.
출력
각각의 Test case에 대해서 해당 집에 거주민 수를 출력하라.

 

예제 입력
2
1
3
2
3
예제 출력
6
10

 


 

풀이
아파트의 계약 조항' k층 n호에 살려면 자신의 아래층의 1호부터 n호까지의 사람들의 수의 합만큼 사람들을 데려와 살아야 한다' 라는 조건을 꼭 지켜야 합니다.

아파트는 0층부터 있고, 각 층에는 1호부터 있으며, 0층 i호에는 i명이 산다고 하네요.
그렇다면 0층에는 1호부터 6호까지 있다고 한다면
0층 - 1, 2, 3, 4, 5, 6
k값이 1부터 시작이 되니까 0층의 각 호수의 사람들의 수는 이렇게 고정이 되겠네요.
0층의 사람 수는 고정이니 k층 까지는 0층을 이용하여 사람 수를 구하면 됩니다.

예를 들어서 k = 2, n = 3 이 주어진다면
2층 - 1, 4, 10 -> 정답
         ↑ (1층 사람 수에서 2층 사람 수를 구함)
1층 - 1, 3, 6
         ↑ (0층 사람 수에서 1층 사람 수를 구함)
0층 - 1, 2, 3

0층부터 시작해서 2층까지 값을 규칙에 따라 더해줍니다.
0층에서 1층 : 1, 2, 3 -> 1, (1+2), (1+2+3)
1층에서 2층 : 1, 3, 6 -> 1, (1+3), (1+3+6)

각 층수에 살고 있는 사람들의 수를 주어진 호수까지 더해주면 답을 찾을 수 있겠네요.

코드를 순서대로 작성한다면
1. 테스트 케이스 수만큼 층수와 호수를 입력
2. 0층의 사람 수를 호수 만큼 저장
3. 주어진 층 수까지 사람 수를 호수까지 더해주고 0층의 사람 수를 초기화
4. 0층 사람 수가 k층의 사람 수로 바뀌게 되고, k층의 n호의 숫자가 제일 끝에 저장되니 해당 숫자를 출력


작성 코드
T = int(input())
for _ in range(T):
    k = int(input())
    n = int(input())
    k0 = [i for i in range(1, n+1)] # 0층의 1호부터 n호까지의 리스트 생성
           # 이렇게도 가능합니다.
           # k0 = []
           # for i in range(1, n+1):
           # k0.append(i)
    
    for j in range(k): # 층수만큼 반복
        for x in range(1, n): 호수만큼 반복 인덱스0 값은 항상 1
            k0[x] += k0[x-1] # 1부터 시작하는 인덱스 범위를 고려하여 [x-1]
    
    print(k0[-1]) # 리스트의 마지막을 출력
728x90
320x100
Comments