기타/코딩테스트

[Python] 백준 1092번 - 배

lazy man 2023. 4. 26. 00:12

1. 문제정보

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

 

1092번: 배

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

www.acmicpc.net

 

 

2. 풀이

2~3시간의 고민 끝에 전략을 생각했는데 구현에 실패해서 다른 블로그의 풀이를 참고했다. 전략은 유사했지만 구현하는 과정에서 큰 차이가 있었다. 나는 크레인을 없애가면서 날짜를 카운팅하는 전략이였지만 박스를 없애가면서 날짜를 카운팅하는 전략이 훨씬 깔끔했다.

 

문제 해결의 포인트는 한 크레인이 상자를 들지 못하면 다음 크레인에서 처리할 수 있고 전체 크레인이 비교되었을 때 날짜를 증가시키면 답을 구할 수 있다.

 

 

3. 코드

import sys
input = sys.stdin.readline

n = int(input())
cranes = list(map(int, input().split()))
m = int(input())
boxs = list(map(int, input().split()))

cranes.sort(reverse=True)
boxs.sort(reverse=True)

if cranes[0] < boxs[0]:
    print(-1)
else:
    time = 0
    while len(boxs) > 0:
        for crane in cranes:
            for box in boxs:
                if crane >= box:
                    boxs.remove(box)
                    break
        time += 1
    print(time)