>
[문제]
평소 반상회에 참석하는 것을 좋아하는 주희는 이번 기회에 부녀회장이 되고 싶어 각 층의 사람들을 불러 모아 반상회를 주최하려고 한다.
이 아파트에 거주를 하려면 조건이 있는데, “a층의 b호에 살려면 자신의 아래(a-1)층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살아야 한다” 는 계약 조항을 꼭 지키고 들어와야 한다.
아파트에 비어있는 집은 없고 모든 거주민들이 이 계약 조건을 지키고 왔다고 가정했을 때, 주어지는 양의 정수 k와 n에 대해 k층에 n호에는 몇 명이 살고 있는지 출력하라. 단, 아파트에는 0층부터 있고 각층에는 1호부터 있으며, 0층의 i호에는 i명이 산다.
- 대충 저 아파트는 이런 식으로 사람이 거주해야한다.
https://www.acmicpc.net/problem/2775
🎨 풀이
💡 전체 코드
T = int(input())
for _ in range(T):
k = int(input())
n = int(input())
people = [1,2,3,4,5,6,7,8,9,10,11,12,13,14]
for i in range(k):
for j in range(1,n):
people[j] += people[j-1]
print(people[n-1])
> 핵심 : 규칙 찾기
🍦 코드 설명 (실행 순서대로 나열)
# main
T = int(input())
1. T를 입력받는다.
- T : 테스트 케이스 수
@ for문 (2번~8번)
for _ in range(T):
2. for문을 실행시킨다. (T번 반복)
k = int(input())
n = int(input())
people = [1,2,3,4,5,6,7,8,9,10,11,12,13,14]
3. k, n을 입력받는다. ex ) k = 3, n = 2 => 302호
- k : 층수
- n : 호수
4. people 변수에 먼저 1부터 14까지 넣어준다.
- 현재 들어가있는 수는 0층 기준이다.
- 1부터 14인 이유는 n 의 범위가 1부터 14까지이기 때문이다.
@ 2중 for문 (5번~7번) => 계산 과정
for i in range(k):
for j in range(1,n):
people[j] += people[j-1]
5. for문을 실행한다. (k번)
6. for문을 실행한다. (1부터 n-1까지)
7. people[j]에 people[j-1] 값을 더해준다.
- 왜 이렇게 해주냐면! 값을 구해주려면 그 밑에 있는 수와 바로 전에 있던 수를 더해주면 되기 때문이다.
- 예를 들면, 203호 = 103호 + 202호 = 6 + 4 = 10 이다.
- 점점 층 수를 계산하면서 올라가는 느낌이다.
print(people[n-1])
8. people[n-1]을 출력한다.
- n-1인 이유는, 배열은 0부터 시작하기 때문이다.
끝~
⭐ 느낀점
> 이런 문제는 규칙 찾는 게 참말루 중요한 것 같다. ^ㅁ^.. 파이팅
'알고리즘 공부 > 백준' 카테고리의 다른 글
[백준] 10156번 - 과자 (파이썬) (0) | 2022.08.13 |
---|---|
[백준] 7568번 - 덩치 (파이썬) (0) | 2022.08.11 |
[백준] 2798번 - 블랙잭 (파이썬) (0) | 2022.08.10 |
[백준] 10039번 - 평균 점수 (파이썬) (0) | 2022.08.08 |
[백준] 2440번 - 별 찍기 3 (파이썬) (0) | 2022.08.07 |