본문 바로가기

스터디 1일 1커밋

240314 [BOJ/백준] 1092. 배

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

 

1092번: 배

첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보

www.acmicpc.net


나의 코드

# 배

from collections import deque

n = int(input())
ships = deque(map(int, input().split()))
m = int(input())
boxes = list(map(int, input().split()))
boxes.sort(reverse=True)  # 박스를 역정렬


max_ship = max(ships)  # 배의 제한 무게 최댓값
count = 0
while boxes and max_ship >= boxes[0]:  # 박스가 남아 있고 배의 제한 무게 최댓값이 박스 최대무게보다 클 때 계속 돈다
    count += 1  # 한 줄 돌고 제거할 박스가 남아 있어서 횟수 +1
    for i in range(n):
        weight = ships.popleft()
        for j in range(len(boxes)):
            if weight >= boxes[j]:
                boxes.remove(boxes[j])
                break
        ships.append(weight)

if len(boxes) == 0: # 다 제거되면 count 출력
    print(count)
else:               # 옮기지 못한 박스가 있으면 -1
    print(-1)

 

결과


이것도 예전 강의에서 배웠던 내용을 적용하면 되는 문제였다. 사실 구하는 방법만 어렴풋이 기억나서 코드로 짜는데는 시간이 조금 많이 걸렸다. 그래도 골드인데 한 번에 통과했다! Python으로도 통과했으면 좋았으련만... 아직 다른 사람의 코드는 보지 못했는데 시간초과 문제를 해결할 수 있는 새로운 방법이 있다면 추가하겠다!