HiTHerE !

1092 : 배 본문

BOJ

1092 : 배

minju26 2023. 2. 20. 23:39

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

 

1092번: 배

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

www.acmicpc.net

 

각 크레인은 무게 제한이 있고, 무게 제한보다 무거운 박스는 크레인으로 움직일 수 없으니

일단 둘째, 넷째 줄 입력으로 주어지는 크레인과 박스를 오름차순으로 정렬해 문제를 풀어보았다.

 

그렇게 문제를 풀다가..

 

[ 크레인 무게 제한 : 2 5 5 5 7 7 11 17 20 20 ]
[ 박스의 무게 : 15 15 17 18 18 ]

 

위와 같은 경우에서는 박스를 옮길 수 있는 크레인을 찾는 과정이 아주 약간... 번거로웠고,

내림차순으로 정렬하면 더 쉬워질 것 같았다.

 

또, 모든 박스를 배로 옮길 수 없으면 -1을 출력해야 하는데

이는 아마도 박스 무게를 감당 할 수 있는 크레인이 없는 경우에 해당할 것이고,

( 다른 경우도 있나...? )

내림차순으로 정렬되어 있다면 이 경우에 대해서도 쉽게 처리 할 수 있겠다고 생각했다 !

 

결론적으로,

크레인 무게 제한과 박스의 무게를 내림차순으로 정렬 한 후

무게 비교를 통해, 옮긴 화물이 담긴 박스는 리스트에서 제거하고

이 과정을 반복했다.

 

import sys

n = int(sys.stdin.readline())
crane = list(map(int, sys.stdin.readline().split()))
m = int(sys.stdin.readline())
box = list(map(int, sys.stdin.readline().split()))

crane.sort(reverse=True)
box.sort(reverse=True)

cnt = 0

if box[0] > crane[0]:
    print(-1)
else:
    while len(box) > 0:
        cnt += 1
        for i in crane:
            for j in box:
                if i >= j:
                    box.remove(j)
                    break
    print(cnt)

 

근데 Python3 으로 하면 시간초과가 뜨고 PyPy3으로 하니까 맞았습니다! 나오눈디..?

'BOJ' 카테고리의 다른 글

1781 : 컵라면  (0) 2023.02.27
1715 : 카드 정렬하기  (0) 2023.02.20
11000 : 강의실 배정  (1) 2023.02.13
1461 : 도서관  (1) 2023.02.13
1041 : 주사위  (1) 2023.02.13