티스토리 뷰

반응형

 

[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)]  # 0층 리스트
    for k in range(floor):  # 층 수 만큼 반복
        for i in range(1, num):  # 1 ~ n-1까지 (인덱스로 사용)
            f0[i] += f0[i-1]  # 층별 각 호실의 사람 수를 변경
    print(f0[-1])  # 가장 마지막 수 출력

 

 

Python3 코드 풀이

 

1. 전체적인 코드 풀이 설명

이번 문제는 임의의 층과 호수를 입력받으면 해당 호실에 사는 사람의 수를 입력하는 문제이다. 해당 호실 사람의 수는 한층 아래 1호부터 같은 호수까지의 사람 수를 합해서 구할 수 있다. 

 

문제를 풀 때, 호수별로 사람 수가 증가하는 데에 동일한 규칙성이 없기 때문에 0층부터 입력받는 층수까지 한층 한층 사람 수를 더해가는 방식으로 풀었다.

 

2. 각 호실에서 사는 사람의 수를 표로 나타냈을 때는 아래와 같다.

4층 1 6 21 56 126
3층 1 5 15 35 70
2층 1 4 10 20 35
1층 1 3 6 10 15
0층 1 2 3 4 5

 

3. 첫 번째 for문 코드 상단부에 대한 설명

for _ in range(t):  
    floor = int(input())  # 층
    num = int(input())  # 호
    f0 = [x for x in range(1, num+1)]  # 0층 리스트

입력받은 테스트 케이스 수만큼 for문을 반복하도록 코드를 작성하고서 for문 안에서 층과 호에 해당하는 두 수를 입력받으면 각각 floor, num 변수에 선언하였다. 

 

층과 호수를 입력받은 후 0층의 1호부터 입력받은 호수까지 거주자 수 리스트를 생성한다. range 함수를 이용해서 1부터 입력받은 숫자까지의 범위에 해당하는 숫자 리스트를 생성했다. 리스트 생성은 comprehension 표현을 이용해서 한 줄로 표현하였다. 

 

4.하위 for문을 작성하는 코드

    for k in range(floor):  # 층 수 만큼 반복
        for i in range(1, num):  # 1 ~ n-1까지 (인덱스로 사용)
            f0[i] += f0[i-1]  # 층별 각 호실의 사람 수를 변경
    print(f0[-1])  # 가장 마지막 수 출력

테스트 케이스 수만큼 반복하는 for문 안에서 하위에 두 개의 for문을 작성한다. 첫 번째 for문은 입력받는 층수만큼 반복하고 두 번째 for문은 각 층의 1호부터 입력받는 호수까지 숫자를 반복해서 위에서 생성한 f0 리스트의 인덱스로 사용한다. 

 

두 번째 for문의 숫자 인덱스를 이용해서 이전 인덱스의 숫자를 더한 값을 리셋한다. 즉, 층 수가 증가할 때마다 한층 아래층의 이전 호실에 사는 사람의 숫자를 더하는 것과 같은 의미가 된다.

 

위 두개의 반복문이 종료됐을 때, 가장 마지막 수를 호출하면 입력받은 층, 호수에 해당하는 사람 수를 출력할 수가 있다.

 

5. 각 층의 거주자 수를 출력해보는 코드

위 코드에서 print 함수를 추가하여 각층의 1~5호실 거주하는 사람 수를 리스트로 출력해보면 아래와 같다.

t = int(input())

for _ in range(t):
    floor = int(input())
    num = int(input())
    f0 = [x for x in range(1, num+1)]
    for k in range(floor):
        for i in range(1, num):
            f0[i] += f0[i-1]
        print(f0)  # 프린트문을 추가
    print(f0[-1])
    
-------------- 출력값 ----------------
[1, 3, 6, 10, 15]
[1, 4, 10, 20, 35]
[1, 5, 15, 35, 70]
[1, 6, 21, 56, 126]
126

 

반응형
댓글
반응형