[#2775 백준][Python] 부녀회장이 될테야
문제
평소 반상회에 참석하는 것을 좋아하는 주희는 이번 기회에 부녀회장이 되고 싶어 각 층의 사람들을 불러 모아 반상회를 주최하려고 한다.
이 아파트에 거주를 하려면 조건이 있는데, “a층의 b호에 살려면 자신의 아래(a-1)층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살아야 한다” 는 계약 조항을 꼭 지키고 들어와야 한다.
아파트에 비어있는 집은 없고 모든 거주민들이 이 계약 조건을 지키고 왔다고 가정했을 때, 주어지는 양의 정수 k와 n에 대해 k층에 n호에는 몇 명이 살고 있는지 출력하라. 단, 아파트에는 0층부터 있고 각층에는 1호부터 있으며, 0층의 i호에는 i명이 산다.
첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다.
풀이
이번 문제는 이해도 한참 걸렸다. 점점 수학문제가 되는 기분이었다.
좀 고민을 해봤는데 재귀함수로 해보는 건 어떨까 하고 대충 생각을 해보았다.
결과는 모퉁이에 보이듯이 실패다.
열심히 짜서 실패 받으면 기분이 너무 울적하니까 구글 찬스 좀 쓸까 싶어서 검색해 보았더니 이미 많은 선배님들이 재귀함수로 실패한 흔적이 보였다.
백준 문제들은 대부분 엄청 큰 수를 테스트하기때문에 재귀함수를 쓰는 순간... 엄청 오래 걸려 아마도 시간초과가 뜰 것이다.
다르게 생각해보려 했으나, 구글링을 하는 순간 리스트라는 글자 힌트를 의도치 않게 받아버렸다.
저 사진이 메인 아이디어다.
모든 층의 인원을 굳이 다 저장할 필요는 없으니 그냥 한층짜리만 계속 업데이트하며 기억하면 된다.
t = int(input())
for _ in range(t):
k = int(input())
n = int(input())
people = [i for i in range(1,n+1)]
for i in range(k):
for j in range(1, n):
people[j] += people[j-1]
print(people[n-1])