반응형
백준 10810번 / 공 넣기 : https://www.acmicpc.net/problem/10810
이번 문제는 조금 복잡하다고 볼 수 있다.
N개의 바구니를 가지고 M번 동안 공을 넣는 작업을 시뮬레이션한다. 각 바구니는 1번부터 N번까지 번호가 매겨져 있으며, 처음에는 모든 바구니가 비어있는 상태이다.
앞으로 M번 공을 넣고, 한 번 공을 넣을 때 공을 넣을 바구니 범위를 정하고, 정한 바구니에 모두 같은 번호가 적혀있는 공을 넣는다. 만약, 바구니에 공이 이미 있는 경우에는 들어있는 공을 빼고, 새로 공을 넣는다.
첫째 줄에 N (1 ≤ N ≤ 100)과 M (1 ≤ M ≤ 100)이 주어진다.
둘째 줄부터 M개의 줄에 걸쳐서 공을 넣는 방법이 주어진다. 각 방법은 세 정수 a b c로 이루어져 있으며, a번 바구니부터 b번 바구니까지에 c번 번호가 적혀져 있는 공을 넣는다는 뜻이다.
예를 들어, 2 5 6은 2번 바구니부터 5번 바구니까지에 6번 공을 넣는다는 뜻이다.
이 문제는 문제의 이해만 조금 복잡할 수 있지 이해만 한다면 구상 자체는 간단하다.
문제의 풀이 흐름은 다음과 같다.
- 바구니의 개수 N과 공을 넣는 횟수 M을 입력받는다.
- 크기가 N인 리스트(바구니 역할)를 만들고, 모든 요소를 0으로 초기화한다.
- M번 반복하면서 다음을 수행한다:
- 공을 넣을 시작 바구니 번호 a, 끝 바구니 번호 b, 그리고 공의 번호 c를 입력받는다.
- 실제 리스트의 인덱스는 0부터 시작하므로, a-1번 인덱스부터 b-1번 인덱스까지 반복하면서 해당 바구니에 c를 저장한다.
- 모든 작업이 끝나면, 리스트의 모든 요소를 문자열로 변환하여 공백으로 구분해 한 줄에 출력한다.
내가 만든 코드는 다음과 같다.
N,M = map(int, input().split())
list = []
for i in range(N):
list.append(0)
for j in range(M):
a,b,c = map(int,input().split())
for k in range(a-1,b):
list[k] = c
result = ' '.join(map(str,list))
print(result)
출력 결과는 다음과 같다.

반응형
'파이썬 > 예제' 카테고리의 다른 글
| 백준 5597번 과제 안 내신 분...? - 역시나 리스트 (0) | 2025.05.19 |
|---|---|
| 백준 10813번 공 바꾸기 - 스왑(swap) 사용하기 (0) | 2025.05.19 |
| 백준 2562번 최댓값 - 리스트 활용하기 (0) | 2025.05.19 |
| 백준 10818번 최소, 최대 - 반복문이 정답은 아니다 (0) | 2025.05.19 |
| 백준 10871번 X보다 작은 수 - join()을 사용하자 (0) | 2025.05.19 |