문제
도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다.
또, 1번부터 N번까지 번호가 적혀있는 공을 매우 많이 가지고 있다.
가장 처음 바구니에는 공이 들어있지 않으며, 바구니에는 공을 1개만 넣을 수 있다.
도현이는 앞으로 M번 공을 넣으려고 한다.
도현이는 한 번 공을 넣을 때, 공을 넣을 바구니 범위를 정하고, 정한 바구니에 모두 같은 번호가 적혀있는 공을 넣는다.
만약, 바구니에 공이 이미 있는 경우에는 들어있는 공을 빼고, 새로 공을 넣는다.
공을 넣을 바구니는 연속되어 있어야 한다.
공을 어떻게 넣을지가 주어졌을 때, M번 공을 넣은 이후에 각 바구니에 어떤 공이 들어 있는지 구하는 프로그램을 작성하시오.
https://www.acmicpc.net/problem/10810
입력
첫째 줄에 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을 출력한다.
예제 입력
5 4
1 2 3
3 4 4
1 4 1
2 2 2
예제 출력
1 2 1 1 0
문제 풀이
N, M = map(int,input().split())
L = [0] * N
for a in range(M):
i, j ,k = map(int,input().split())
for b in range(i,j+1):
L[b-1] = k
for c in range(N) :
print(L[c], end=" ")
공을 넣지 않는다면 0을 출력해야 하기에, 0으로 이루어진 N개의 바구니를 만들었습니다.
이후 공을 M번 넣어주기 위해 반복문을 활용했습니다.
i, j, k를 입력받은 후, i부터 j까지 k를 넣는 반복문을 추가로 사용하였습니다.
문제에서 바구니에 공이 들어있는 경우 들어있는 공을 빼고 새로 공을 넣는 규칙을 명시했습니다.
해서 추가적인 조치는 필요하지 않습니다.
이후 리스트를 출력합니다.
다만, 출력 시 숫자들을 한 줄로 공백과 함께 출력해야 하는데요.
상기 코드에 적힌 반복문을 활용하는 방법 이외에 몇가지 방법이 더 있습니다.
1. 문자열로 변환 후 출력
'구분자'.join(List)
iterable 한 자료형에 모두 사용 가능합니다. 단, 문자열로 이루어져야 합니다.
해서 map 함수를 활용하여 리스트를 모두 문자열로 변환한 후, 공백을 구분자로 출력하였습니다.
print(' '.join(map(str,L)))
2. unpacking
print(*L)
packing / unpacking에 대한 자세한 설명은 하기 링크를 통해 확인하실 수 있습니다.
저처럼 파이썬을 독학하시는 분들에게 도움이 되길 바라며,
혹 더 좋은 방법이 있거나 오류가 있다면 편하게 말씀 부탁드립니다.