파이썬/예제

백준 10810번 공 넣기 - 리스트 & 조건문

thpop 2025. 5. 19. 15:09
반응형

백준 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)

 

 

출력 결과는 다음과 같다.

반응형