728x90
2775번: 부녀회장이 될테야
첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다. (1 <= k <= 14, 1 <= n <= 14)
www.acmicpc.net
문제
평소 반상회에 참석하는 것을 좋아하는 주희는 이번 기회에 부녀회장이 되고 싶어 각 층의 사람들을 불러 모아 반상회를 주최하려고 한다.
이 아파트에 거주를 하려면 조건이 있는데, “a층의 b호에 살려면 자신의 아래(a-1)층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살아야 한다” 는 계약 조항을 꼭 지키고 들어와야 한다.
아파트에 비어있는 집은 없고 모든 거주민들이 이 계약 조건을 지키고 왔다고 가정했을 때, 주어지는 양의 정수 k와 n에 대해 k층에 n호에는 몇 명이 살고 있는지 출력하라. 단, 아파트에는 0층부터 있고 각층에는 1호부터 있으며, 0층의 i호에는 i명이 산다.
풀이
수학 문제다.
가장 아래층인 0층은 i호당 i호를 살고 있다.
1호 - 1명, 2호 - 2명...
그리고 a층의 b호에 살려면 자신의 아래층의 1호부터 b호까지 사람들의 수의 합만큼 사람이 살아야 한다.
0층 1 2 3 4 5 6
1층 1 3 6 10 15 21
2층 1 4 10 20 35 56
수열의 점화식은 d[i][j] = d[i-1][j] + d[i][j-1] 이 된다.
위의 표를 잘 보면, 1층의 2호에 사는 6명을 구할 때 0층의 1, 2, 3명을 구할 필요 없이, 0층의 2호에 사는 사람과 1층의 2호에 사는 사람을 더하면 된다. 이후에도 동일한 규칙이 적용된다!!
코드
for _ in range(int(input())):
k=int(input());n=int(input())
ho=[i for i in range(1,n+1)] # 아파트 호수 1,2,3,4...호
for i in range(k): # 층의 높이만큼 반복
for j in range(1,n): # 각 층의 1호(Index 0)는 생각할 필요가 없으므로 생략한다. n-1호까지 계산.
ho[j]+=ho[j-1] # 호수에 이전의 호의 값을 더한다.
print(ho[n-1]) # 인덱스로 계산해야 하니 n-1의 값을 출력
'PS > Python' 카테고리의 다른 글
[BOJ / Java] 10818 - 최소, 최대 (0) | 2020.11.12 |
---|---|
[스택][BOJ / Python] 10773 - 제로 (0) | 2020.10.21 |
[수학][BOJ / Python] 2292 - 벌집 (0) | 2020.10.12 |
[수학][BOJ / Python] 1712 - 손익분기점 (0) | 2020.10.08 |
[문자열][BOJ / Python] 2941 - 크로아티아 알파벳 (0) | 2020.10.05 |
최근댓글