[Python] 백준 1092 배 풀이

지민·2022년 8월 21일
1
post-thumbnail
# PROBLEM - 배
# TIER - G5
# NUMBER - 1092
# DATE - 2022-08-21 22:26
# IDEA - 크레인, 박스를 전부 역순으로 정렬한 후에
# 박스, 크레인 각각 순회해서
# 만약 크레인 >= 박스 인 경우 
# 크레인 += 1 해주는 식으로 큰 박스부터 처리

# PS : 무조건 배열의 길이를 할당해주는 친구는 -1 !!
# 이거 잘못지정해서 틀림 ㅠ

import sys
input = sys.stdin.readline

N = int(input())
crane = sorted(list(map(int, input().split())), reverse=True)
M = int(input())
box = sorted(list(map(int, input().split())), reverse=True)

count = 0
prev = -1

while len(box) > 0:
    count += 1
    c = i = 0
    while i < len(box) and c < len(crane): # 크레인, 박스 범위 안 순회
        if crane[c] >= box[i]: # 크레인이 박스보다 큰 경우 
            box[i] = 0 # 박스를 지워주고
            c += 1 # 크레인 idx += 1 해서 그 다음 크레인을 기준값으로 순회
        i += 1
    box = [i for i in box if i] # 0인 박스를 걸러줌 (그냥 바로 pop하면 idxError)
    if prev == len(box): # 근데 만약 내 크레인으로 0을 못만드는 큰 박스가 있으면
        print(-1) # -1 출력
        exit() # 만약 크레인 최대가 32인데 33의 박스가 들어있으면 while을 몇번 돌아도
    prev = len(box) # 안변하므로 prev == len(box) 일 경우 -> -1 이 성립한다
print(count)
profile
남들 개발 공부할 때 일기 쓰는 사람

0개의 댓글