백준

[파이썬]-백준(BOJ) 1092 _ 배

Ho's log 2021. 4. 29. 09:53

www.acmicpc.net/problem/1092

 

1092번: 배

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

www.acmicpc.net

 

해설

최대힙으로 풀어볼려고 했지만 실패해서, 구글링을 참고한결과 그냥 포문을 다 돌려주면 되었따.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# https://www.acmicpc.net/problem/1092
 
# import heapq, sys
# # del, extend
# def solution(l, p, s):
#     if max(l) < max(p):  # 실을수 없는 경우 빠꾸
#         print(-1)
#     p.sort(reverse=True)
#     # 해결 아이디어
#     # 가장 큰거 부터 넣어버리자~
#     # ㅇㅋ?
#     # 갯수 세는거
#     count = 0
#     # 물건이 있으면
#     while 1:
#         # print(p)
#         q = []  # 큐 사용
#         # 물건이 없으면 끝내고
#         if len(p) == 0:
#             break
#         # 큐에 크레인들을 넣어 준다 최대힙
#         for element in l:
#             heapq.heappush(q, -element)
#         # 시간초 하나 증가
#         count += 1
#         # 물건 번호
#         tempcount = 0
#         # 크레인 이 있으면
#         while 1:
#             # print(q)
#             # 크레인이 없으면 종료
#             if len(q) == 0:
#                 break
#             # 물건도 없을 경우 종료
#             if len(p) == 0:
#                 break
#             # if tempcount >= s:
#             #     print(-1)
#             #     return
#             # 만약 물건이 무게가, 크레인이 무게보다 작거나 같다면
#             if p[tempcount] <= -(q[0]):
#                 heapq.heappop(q)  # 크레인 빼버리고
#                 del p[tempcount]  # 물건에서 삭제한다.
#                 tempcount = 0  # 다시 물건 번호는 영번 부터
#                 continue  # 다음물건 적재하러
#             # 적재할수 없으면  증가해서 다음 거로 넘어간다
#             tempcount += 1
#             # 만약에 더이상 적재를 할 수가 없다면 이번턴은 끝내준다
#             if (-min(q)) < min(p):
#                 break
#     print(count)
# if __name__ == '__main__':
#     n = 3
#     l = [6, 8, 9]
#     s = 5
#     p = [2, 5, 2, 4, 7]
#     #
#     n = int(sys.stdin.readline())
#     l = list(map(int, sys.stdin.readline().split()))
#     s = int(sys.stdin.readline())
#     p = list(map(int, sys.stdin.readline().split()))
#     solution(l, p, s)
 
import sys
= int(input())
limits = map(int, sys.stdin.readline().split()) # 크레인 별 무게 제한
= int(input())
packages = map(int, sys.stdin.readline().split()) # 화물 별 무게
 
# 무게 제한과 화물 무게 전부 내림차순으로 정렬
limits = sorted(limits, reverse=True)
packages = sorted(packages, reverse=True)
 
# 무게 제한이 제일 높은 크레인도 제일 무거운 화물을 들 수 없는 경우
if packages[0> limits[0] : 
    print(-1)
    exit()
 
answer = 0
# 화물이 전부 옮겨질 때까지
while len(packages) > 0:
    answer += 1
    # 무게제한을 돌면서 옮길 수 있는 화물을 옮김
    for l in limits:
        for j in range(len(packages)):
            if l >= packages[j]: # 화물을 옮길 수 있으면
                del packages[j]
                break
print(answer)
cs