2024. 4. 17. 15:55ㆍAlgorithm ( p & swlug )/Baekjoon
2775번: 부녀회장이 될테야 (acmicpc.net)
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차적으로 문제를 이해하는 시간을 가졌다.
위에 써있는 것처럼 for문을 사용(중첩반복문)해야할 것 같은 것, input을 통해 각각 입력받아야하는 것 외에는 코드를 어떤식으로 짜야할지 감이 오지않았다...
그래서 이 문제 또한 코드를 짜는데 조금 도움을 받아보기로 하였다.
코드
t = int(input())
for i in range(t):
k = int(input())
n = int(input())
people = [i for i in range(1, n+1)]
for x in range(k):
new = []
for y in range(n):
new.append(sum(people[:y+1]))
people = new.copy()
#print(people)
print(people[-1])
코드 설명
- t를 입력 받는다.
- k를 입력 받는다. (층을 나타냄)
- n을 입력 받는다. (호수를 나타냄)
- 0층에는 1호부터 n호까지 사람들이 살고 있으므로, 리스트 people에 1부터 n까지의 숫자를 저장한다.
- 1층부터 k층까지 각 층마다 호수별 사람의 수를 계산한다.
- 현재 층의 각 호수에 대해, 그 아래층(이전 층)의 1호부터 해당 호수까지의 사람 수의 합을 구한다.
- 이 합을 리스트 new에 저장한다.
- 계산이 완료되면 people 리스트를 new 리스트로 갱신한다.
- 마지막으로 people 리스트에서 가장 마지막 요소를 출력한다. (k층 n호에 사는 사람의 수를 나타냄)
✅느낀점
이 문제는 각 층마다 각 호수별 사람의 수를 누적하여 계산함으로써, 동적 계획법을 활용하여 문제를 해결하도록 해야한다.
이것도 동적 계획법을 활용해야했다.
동적 계획법 공부를 좀더 제대로 해야할 것같다. 스스로 풀 수 있을 때까지..
이번주 알고리즘 과제 끝.
[ 참고 학습자료 ]
백준 2775번 [파이썬 알고리즘] 부녀회장이 될테야 (tistory.com)
백준 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)] # 0층 리스트 for k in range(floo
ooyoung.tistory.com
'Algorithm ( p & swlug ) > Baekjoon' 카테고리의 다른 글
1학기 4주차 알고리즘 과제 (2798번 : 블랙잭) (0) | 2024.05.05 |
---|---|
1학기 4주차 알고리즘 과제 (2231번 : 분해합) (0) | 2024.05.04 |
1학기 3주차 알고리즘 과제 (9095번 : 1, 2, 3 더하기) (0) | 2024.04.17 |
1학기 2주차 알고리즘 과제 (2629번 : 양팔저울) (0) | 2024.03.28 |
1학기 2주차 알고리즘 과제 (1520번 : 내리막 길) (0) | 2024.03.28 |