본문 바로가기

알고리즘 공부/알고리즘 구현 기초

백준) 공 넣기-파이썬

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

(브론즈 3 문제)

 

10810번: 공 넣기

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

www.acmicpc.net

입력

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())
result=[]
for i in range(M):
    a,b,c=map(int,input().split())
    for j in range(a,b+1):
        result[j]=c
            
for i in range(N):
    print(result[i],end=' ')

풀이(생각 과정)

처음에는 문제를 이해하는데 시간이 조금 걸렸다. 복잡하게 설명이 되어 있었지만 조건을 하나하나 분석해보니 쉬운 조건들이였다. 조건들에 대해서 차분히 생각하면서 공이 어떻게 들어가는지 생각해보면 금방 분석할 수 있었다.

 

이 코드는 인덱스 오류로 인해 실행이 되지 않았다.

 

처음으로 2번째 라인에서 결과 값을 저장할 result 리스트에서 0을 전부 넣지 않고 비워둬서 오류가 발생했었다.

 

2번째로 문제 조건에서 바구니의 번호가 1번부터 시작한다고 하였으나 결과값을 넣는 과정에서 0번째부터 시작하게 구현해서 문제가 발생하였다.

 

다른 코드(풀이)

 

N,M=map(int,input().split())
result=[0 for _ in range(N)]
for i in range(M):
    a,b,c=map(int,input().split())
    for j in range(a,b+1):
        result[j-1]=c
            
for i in range(N):
    print(result[i],end=' ')

2번째 라인에서 리스트의 항목에 대해 바구니의 개수만큼 0으로 초기화하는 작업을 수행 해야한다. 그래야 공이 들어가지 않는 바구니에 대해서 0을 출력할 수 있게 된다.

 

6번째 라인에 대해서 1번째 바구니부터 시작한다고 했고, 리스트의 index는 0번부터 존재하기 때문에 리스트의 값 갱신시 index에서 -1을 해야하는 과정이 필요하다. 그렇기에 j가 아닌 j-1을 해야한다.

 

추가적으로 print(result)와 같이 출력을 진행할 경우 리스트 항목이 그대로 출력된다.

([1,2,3,4]와 같이 괄호가 적용된 상태에서 출력된다.)

따라서 문제의 출력과 같이 값 자체를 출력하기 위해서는 반복문을 통해서 result 리스트 내에 있는 값을 하나하나 빼서 공백을 두고 출력해야한다. 출력의 형태가 동일하지 않을 시 출력 방식이 다르다는 문구가 검사때 뜬다.

 

이 문제를 통해서 인덱스의 값을 문제의 조건에 맞게 생각해서 구현해야 하는 점과 파이썬에서 반복문을 통해 동일한 값으로 리스트를 초기화 하는 방법을 알게 되었다.