[SWEA] 5201. 컨테이너 운반

Vincent·2023년 4월 5일

문제 설명

화물이 실려 있는 N개의 컨테이너를 M대의 트럭으로 A도시에서 B도시로 운반하려고 한다.
트럭당 한 개의 컨테이너를 운반 할 수 있고, 트럭의 적재용량을 초과하는 컨테이너는 운반할 수 없다.
컨테이너마다 실린 화물의 무게와 트럭마다의 적재용량이 주어지고, A도시에서 B도시로 최대 M대의 트럭이 편도로 한번 만 운행한다고 한다.
이때 이동한 화물의 총 중량이 최대가 되도록 컨테이너를 옮겼다면, 옮겨진 화물의 전체 무게가 얼마인지 출력하는 프로그램을 만드시오.
화물을 싣지 못한 트럭이 있을 수도 있고, 남는 화물이 있을 수도 있다. 컨테이너를 한 개도 옮길 수 없는 경우 0을 출력한다.

제한사항

첫 줄에 테스트케이스의 수 T가 주어진다. 1<=T<=50
다음 줄부터 테스트 케이스의 별로 첫 줄에 컨테이너 수 N과 트럭 수 M이 주어지고, 다음 줄에 N개의 화물이 무게wi, 그 다음 줄에 M개 트럭의 적재용량 ti가 주어진다.
1<=N, M<=100, 1<=wi, ti<=50
각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다.

풀이

활용개념 : 그리디

def load():
    ans = 0
    while w_lst and sum(t_lst) != 0: #더 이상 담을 컨테이너 없거나 트럭 다 사용했을 때까지      
        for i in range(len(t_lst)):
            for j in range(len(w_lst)):
                if t_lst[i] >= w_lst[j]:
                    ans += w_lst[j]
                    w_lst.pop(0) #담은 트럭 있으니 pop
                    t_lst[i] = 0 #트럭 사용 표시 
                    break
                else: #트럭 적재용량보다 컨테이너가 무거운 경우
                    break
        
        if not w_lst: #더 이상 담을 컨테이너 없다면
            break
        
        w_lst.pop(0) #어느 트럭도 담을 수 없는 무게였던 경우
    
    return ans

T = int(input())
for tc in range(1,T+1):
    N, M = map(int, input().split()) #컨테이너 수, 트럭 수
    w_lst = sorted(list(map(int, input().split())), reverse = True) #화물의 무게 내림차순 정렬
    t_lst = sorted(list(map(int, input().split())), reverse = True) #트럭 적재 용량 내림차순 정렬
    
    
    print(f'#{tc} {load()}')


profile
Frontend & Artificial Intelligence

0개의 댓글