가영이의 스토리

[백준/Python] 백준 10810번 공 넣기 본문

코딩연습장/백준

[백준/Python] 백준 10810번 공 넣기

gayomii 2023. 8. 21. 16:47

🏆백준 10810번-공 넣기

https://www.acmicpc.net/problem/10810

 

10810번: 공 넣기

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 또, 1번부터 N번까지 번호가 적혀있는 공을 매우 많이 가지고 있다. 가장 처음 바구니에는 공이

www.acmicpc.net


✍️문제

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 또, 1번부터 N번까지 번호가 적혀있는 공을 매우 많이 가지고 있다. 가장 처음 바구니에는 공이 들어있지 않으며, 바구니에는 공을 1개만 넣을 수 있다.

도현이는 앞으로 M번 공을 넣으려고 한다. 도현이는 한 번 공을 넣을 때, 공을 넣을 바구니 범위를 정하고, 정한 바구니에 모두 같은 번호가 적혀있는 공을 넣는다. 만약, 바구니에 공이 이미 있는 경우에는 들어있는 공을 빼고, 새로 공을 넣는다. 공을 넣을 바구니는 연속되어 있어야 한다.

공을 어떻게 넣을지가 주어졌을 때, M번 공을 넣은 이후에 각 바구니에 어떤 공이 들어 있는지 구하는 프로그램을 작성하시오.


정답

N, M = map(int,input().split())
basket = [0] * (N)

for _ in range(M):
    i, j, k = map(int, input().split())
    for n in range(i, j+1):
        basket[n-1] = k
        
for n in range(N):
    print(basket[n], end=" ")

💫 해설 및 한줄평

일단 문제 해석부터 하자면 N개의 바구니가 나란히 1번부터 N번까지 나열되어있다.그리고 바구니에는 공을 하나만 넣을수있으니 공이 들어있으면 새로 들어가는 공의 번호가 최종 바구니의 공이된다.그리고 공 넣는건 M번 반복하고, i번부터 j번까지의 바구니에 k번호의 공을 넣는다.즉, i번부터 j번까지에 k번호의 공을 넣는 행위를 M번 진행하는것이고 M번째에 새로넣는공이 해당 바구니의 최종 공 번호! (기존 공이 들어있는 바구니에 새로 공을 넣지않으면 제일 마지막에 들어간 공번호가 최종 공번호가 된다.)그래서 최종 결론은 N개의 바구니에 들어있는 공 번호가 몇번이냐? 이거!

 

N, M으로 바구니갯수, 반복횟수를 받고 basket에 0을 디폴트값으로 넣어준 후 바구니 갯수인 N개만큼 곱해준다. (0을 디폴트해주는 이유는 공이 안들어가면 0을 출력해야하기때문)그리고 위에서 말한대로 i,j,k를 M번씩 반복해서 받아주고, i부터 j까지의 바구니에 k값을 넣어준다. 이때 j+1을 해주는건 for문에서 j번째까지 반복해주기 위해서이고, n-1을 해주는건 바구니 번호는 1부터 시작하는데 basket은 파이썬에서 입력해줬기 때문에 0부터 시작하기 때문이다. (2번 바구니에 k번공을 넣어주려면 basket에서는 1번째에 넣어줘야하기때문)그리고 마지막으로 list값을 공백으로 출력하기위해 end 옵션을 넣어준다.

 

아니 내가 문해력이 딸리는건지..

문제읽고 도대체 뭔소린지 한참동안 쳐다봤네 ㅜ

결국은 그림그려서 차근차근 넣어보니깐 겨우 이해됐긴한데 완벽히는 아직,,,,🥲

나처럼 이해 못하는 사람 있을까봐 휘뚜루마뚜루 설명을 해보긴 해보았습니....다..

 

 

 

 

 

 

 

Comments