본문 바로가기
Coding Test (코딩 테스트)

코딩테스트 12일차(2025.01.28) - 백준10810번(공 넣기)

by BioLearner 2025. 1. 28.
반응형

첫째 줄 N(바구니 개수) M(넣을 공 횟수)

나머지 N 줄 i j k (M개의 줄에 걸쳐서 공을 넣는 방법: i번 바구니부터 j 바구니까지 k번 번호가 적혀있는 공을 넣는다는 뜻)

ex) 2 5 6은 2번 바구니부터 5번바구니까지 6번 공을 넣는다는 뜻

 

1번 바구니부터 N번 바구니에 들어있는 공의 번호를 공백으로 구분해 출력. 공이 들어있지 않은 바구니는 0을 출력

 

bucket, count = map(int, input().split())
result = []
result = [0] * bucket

real_count = 0

while True:
    try:
        a, b, c = map(int, input().split())
        for i in range(b - a + 1):
            result[a + i] = c
            real_count += 1
    except real_count == count:
        break

for i in range(len(result)):
    print(result[i], end = " ")

먼저, 첫 번째 줄에서 바구니의 개수와 값을 넣을 횟수를 입력받고, try와 except 구문을 사용하여 지정된 횟수만큼 값을 입력받는다. 입력 횟수가 다 채워지면 더 이상 값을 받지 않도록 처리하였으며, result[a + i] = c를 통해 리스트의 값을 해당 범위에 맞춰 대체하는 방식으로 구현하였다. 

결과: 틀림

정답

n, m=map(int, input().split())
box = [0]*n

for _ in range(m) :
    i,j,k = map(int, input().split())
    for idx in range(i, j+1):
        box[idx-1] = k
for i in range(n):
    print(box[i], end=' ')

 

내 답지에서 for i in range(b - a + 1)를 잘못사용하였다. 또한 result = []을 할 필요도 없었는데 하였다. 

 

틀린 이유

1. for i in range(b - a + 1)의 사용

2. result = []를 사용한 점

3. except real_count == count: 구문

이 구문의 경우 try-except 구문에서 real_count = count와 같은 조건은 사용할 수 없다. 이것은 애러처리할 때만 유효하다. 

 

고찰

이 문제에서 리스트 외에 deque, set, dict 등을 사용하면 더 유용할까?

deque는 양쪽 끝에서 효율적인 삽입/삭제가 가능한 자료 구조 하지만 deque를 사용하는 것이 특별한 이점을 주지는 않는다. 

 

set은 중복을 허용하지 않는 자료 구조로, 값을 빠르게 추가하거나 제거할 수 있다. 하지만 순서가 없는 자료 구조이기 때문에 적합하지 않다. 

 

dict는 키와 값으로 데이터를 저장하는 자료 구조. dict는 기본적으로 순서를 보장하지 않는다. 

 

결론적으로 여기서 list가 가장 적합한 자료구조다. 

반응형