해설
최대힙으로 풀어볼려고 했지만 실패해서, 구글링을 참고한결과 그냥 포문을 다 돌려주면 되었따.
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 N = int(input()) limits = map(int, sys.stdin.readline().split()) # 크레인 별 무게 제한 M = 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 |
'백준' 카테고리의 다른 글
[파이썬]-백준(BOJ)10809 _ 알파벳 찾기 (0) | 2021.07.26 |
---|---|
[파이썬]-백준(BOJ) 10815번_ 숫자카드 (0) | 2021.05.03 |
[파이썬]-백준(BOJ) 11000 _ 강의실 배정 (0) | 2021.04.29 |