[백준/BOJ] 10813번: 공 넣기 (Python) 풀이Dev/PS2024. 5. 30. 22:33
Table of Contents

Baekjoon Online Judge (BOJ) 의 10810번 문제인 '공 넣기' 를 풀어보았다.
[문제 정보]
https://www.acmicpc.net/problem/10810
문제 개요:
도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 또, 1번부터 N번까지 번호가 적혀있는 공을 매우 많이 가지고 있다. 가장 처음 바구니에는 공이 들어있지 않으며, 바구니에는 공을 1개만 넣을 수 있다.
도현이는 앞으로 M번 공을 넣으려고 한다. 도현이는 한 번 공을 넣을 때, 공을 넣을 바구니 범위를 정하고, 정한 바구니에 모두 같은 번호가 적혀있는 공을 넣는다. 만약, 바구니에 공이 이미 있는 경우에는 들어있는 공을 빼고, 새로 공을 넣는다. 공을 넣을 바구니는 연속되어 있어야 한다.
공을 어떻게 넣을지가 주어졌을 때, M번 공을 넣은 이후에 각 바구니에 어떤 공이 들어 있는지 구하는 프로그램을 작성하시오.
[ 입력 ]
첫째 줄에 N (1 ≤ N ≤ 100)과 M (1 ≤ M ≤ 100)이 주어진다.
둘째 줄부터 M개의 줄에 걸쳐서 공을 넣는 방법이 주어진다. 각 방법은 세 정수 i j k로 이루어져 있으며, i번 바구니부터 j번 바구니까지에 k번 번호가 적혀져 있는 공을 넣는다는 뜻이다. 예를 들어, 2 5 6은 2번 바구니부터 5번 바구니까지에 6번 공을 넣는다는 뜻이다. (1 ≤ i ≤ j ≤ N, 1 ≤ k ≤ N)
도현이는 입력으로 주어진 순서대로 공을 넣는다.
[ 출력 ]
1번 바구니부터 N번 바구니에 들어있는 공의 번호를 공백으로 구분해 출력한다. 공이 들어있지 않은 바구니는 0을 출력한다.
즉, N은 바구니와 공의 번호(1~N까지)의 끝을 뜻하고, M은 공을 넣는 행위의 횟수(테스트 케이스의 수)를 뜻한다.
위 문제 설명처럼 i~j번 바구니까지에 k번 번호가 적힌 공을 넣으면 되고, 공을 넣을 때 주의할 점은 이미 바구니에 공이 있을 경우에는 안에 공은 없던걸로 하고 새로운 공(현재 입력받은 k번 번호의 공)을 넣는다는 점이다.
공을 넣는 행위를 완료했다면 1~N번 바구니에 들어있는 공의 번호를 공백으로 구분해 출력하면 된다. 단, 공이 들어있지 않은 바구니는 0을 출력한다.
알고리즘:
- N(바구니와 공의 번호), M(공을 넣는 행위의 횟수, 테스트 케이스의 수)를 같은 줄에 입력받는다.
- basket(바구니 역할을 할 배열) 변수를 만들고 빈 배열로 초기화해준다.
- N번 반복하는 반복문을 이용해 basket에 N번 바구니까지의 바구니를 모두 넣어준다. (공이 들어있지 않은 바구니는 0을 출력해야 하므로 기본값은 0으로 초기화)
- M번 반복하는 반복문을 만들고, 공백으로 구분되어져 있는 정수 i, j, k를 입력받는다.
- i~j번 바구니에 k번 번호가 적힌 공을 넣기 위하여 공 넣는 행위를 담당하는 M번 반복하는 반복문 내부에 i~j만큼 반복하는 반복문을 만들어주고(이중 반복문), 바구니 안에 원래 공의 유무와 관계없이 새로운 공을 넣어주기 위하여 i~j번 바구니의 값을 k번 공으로 초기화해준다.
- 공 넣는 작업이 완료되었다면 1~N번 바구니에 들어있는 공 번호를 공백으로 구분해 출력해야 하므로, N번 반복하는 반복문을 이용하여 basket 배열값을 모두 출력한다.
코드:
N, M = map(int, input().split()) # N: 바구니, 공 번호, M: 공넣는 행위 수
basket = []
for i in range(0, N):
basket.append(0)
for _ in range(0, M): # 공 넣는 과정
i, j, k = map(int, input().split())
for l in range(i-1, j):
basket[l] = k
for i in range(0, N): # 1번~N번 바구니에 들어있는 공번호 출력
print(basket[i], end=' ')

위 풀이에 대한 질문이나 틀린 정보가 있다면 댓글로 말씀해 주시면 감사하겠습니다!
728x90
'Dev > PS' 카테고리의 다른 글
| [백준/BOJ] 5597번: 과제 안 내신 분..? (Python) 풀이 (0) | 2024.05.30 |
|---|---|
| [백준/BOJ] 10813번: 공 바꾸기 (Python) 풀이 (0) | 2024.05.30 |
| [백준/BOJ] 2562번: 최댓값 (Python) 풀이 (0) | 2024.05.28 |
| [백준/BOJ] 10818번: 최소, 최대 (Python) 풀이 (0) | 2024.05.27 |
| [백준/BOJ] 10871번: X보다 작은 수 (Python) 풀이 (0) | 2024.05.27 |
@KangJerry :: 강제리의 개발 이야기
실력있는 개발자가 되고싶은 22학번 대학생입니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!