백준 홈페이지 문제와 개인적인 풀이를 작성한 글입니다.
문제를 풀기 전에,
필자는 솔직히 읽으면서, '오 쉬운데?' 라는 생각을 했지만 구현하지 못했습니다.
( 사실 맨 처음에는 문제 이해하는 것에 시간을 많이 썼습니다. - 무슨 말이지 이게.. 하면서 하하..)
이해가 되고 피보나치 수열과 비슷한데 어떻게 구현하지? 라는 생각을 하며 반성을 하였습니다.
구현이라는 문제는 참 생각으로는 간단할지 몰라도 구현을 하지 못하는 자기 자신을 반성할 수 밖에 없는 것 같습니다.
반성하면서 한 줄 적어봅니다. :)
아파트에 다음과 같이 살고 있다고 생각하시면 이해에 도움되실 것 같습니다.
2층 | 1 | 4 ( 1 + 3 ) | 10 ( 1 + 3 + 6) | 20 ( 1 + 3 + 6 + 10) |
1층 | 1 | 3 ( 1 + 2 ) | 6 ( 1 + 2 + 3) | 10 ( 1 + 2 + 3 + 4) |
0층 (i 호에 i 명) | 1 | 2 | 3 | 4 |
문제
평소 반상회에 참석하는 것을 좋아하는 주희는 이번 기회에 부녀회장이 되고 싶어 각 층의 사람들을 불러 모아 반상회를 주최하려고 한다.
이 아파트에 거주를 하려면 조건이 있는데, “a층의 b호에 살려면 자신의 아래(a-1)층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살아야 한다” 는 계약 조항을 꼭 지키고 들어와야 한다.
아파트에 비어있는 집은 없고 모든 거주민들이 이 계약 조건을 지키고 왔다고 가정했을 때, 주어지는 양의 정수 k와 n에 대해 k층에 n호에는 몇 명이 살고 있는지 출력하라. 단, 아파트에는 0층부터 있고 각층에는 1호부터 있으며, 0층의 i호에는 i명이 산다.
입력
첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다
출력
각각의 Test case에 대해서 해당 집에 거주민 수를 출력하라.
제한
1 ≤ k, n ≤ 14
예제 입력 1 | 예제 출력 1 |
2 1 3 2 3 |
6 10 |
내 코드 - 실패 (다른 분 코드 참고)
# 2775번 부녀회장이 될테야
n = int(input());
for _ in range(n):
# 층 호 각각 받기
floor = int(input());
room = int(input());
base = [i for i in range(1, room + 1)];
for i in range(floor):
for j in range(1, room):
base[j] += base[j -1];
print(base[-1]);
문제를 풀면서, 왜 base로 선언되어 있는 배열만 사용했지 ?
라고 생각하신다면, 필자와 동일하게 생각한 겁니다.
필자도 초반에는 이해하지 못했고, 저렇게 해야하는 이유가 뭘까 라는 생각을 해서 print 를 찍어봤습니다.
문제에 나온 것 처럼 0층 각 호실 마다 1 2 3 4 로 들어가 있습니다.
맨 처음 예신인 floor = 1 / room = 3 이 들어왔습니다.
# 2775번 부녀회장이 될테야 - 풀이
base = [i for i in range(1, 4 + 1)];
# 1 2 3 4
for i in range(1): # floor
for j in range(1, 4): # 1 2 3
base[j] += base[j -1];
print(*base);
# 1 번
# 1 3 3 4
# 2번
# 1 3 6 4
# 3번
# 1 3 6 10
이해가 조금이라도 되셨을까요?
그렇다면 다른 문제 풀러 가시지오!
'개발 > Coding Test - Python' 카테고리의 다른 글
[Python] 백준 11651번 좌표 정렬하기 2 - 정렬 (0) | 2023.06.24 |
---|---|
[Python] 백준 18110번 solved.ac - 구현 (0) | 2023.06.23 |
[Python] 백준 12852번 1로 만들기 2 - 다이나믹 프로그래밍 (0) | 2023.06.21 |
[Python] 백준 10816번 숫자 카드 2 - 정렬, 딕셔너리 (0) | 2023.06.20 |
[Python] 백준 11650번 좌표 정렬하기 - 정렬 (0) | 2023.06.20 |