본문 바로가기
TIL - 프로그래밍/Python 알고리즘

[SWEA] 5201. 컨테이너 운반 - Python

by chaemj97 2022. 3. 29.
728x90

https://swexpertacademy.com/main/learn/course/lectureProblemViewer.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

< 📝 문제 >
화물이 실려 있는 N개의 컨테이너를 M대의 트럭으로 A도시에서 B도시로 운반하려고 한다.

트럭당 한 개의 컨테이너를 운반 할 수 있고, 트럭의 적재용량을 초과하는 컨테이너는 운반할 수 없다.

컨테이너마다 실린 화물의 무게와 트럭마다의 적재용량이 주어지고, A도시에서 B도시로 최대 M대의 트럭이 편도로 한

 

번 만 운행한다고 한다.

이때 이동한 화물의 총 중량이 최대가 되도록 컨테이너를 옮겼다면, 옮겨진 화물의 전체 무게가 얼마인지 출력하는 프로

 

그램을 만드시오.

화물을 싣지 못한 트럭이 있을 수도 있고, 남는 화물이 있을 수도 있다. 컨테이너를 한 개도 옮길 수 없는 경우 0을 출력

 

한다.

< ❓ 생각 >

최대한 많은 화물을 운반하기 위해 적재 용량이 큰 트럭부터 (화물 무게가 무거운 순으로)

1. for문

used를 사용해서 담은 화물 표시

i번 트럭은 i번 이상의 화물을 싣는다 -> 실은 적 없고 트럭 적재용량보다 작은 화물만

* 문제점

이미 실었던 화물을 한번 더 확인하게 된다...

 

2. while문

j번째 화물이 현재 트럭 적재용량보다 작으면 싣기

 


< 💻 코드 >

1. for문 사용 

# 테스트 케이스 개수
T = int(input())

for tc in range(1, T + 1):
    # N : 컨테이너 수, M : 트럭수
    N, M = map(int, input().split())
    # N개의 화물 무게
    w = list(map(int, input().split()))
    # M개 트럭의 적재 용량
    t = list(map(int, input().split()))

    # 오름차순 정리
    w.sort(reverse=True)
    t.sort(reverse=True)
    
    # 옮긴 컨테이너
    used = [0] * N
    
    # 화물 이동 가능 최대량
    max_sum = 0

    for i in range(len(t)):
        for j in range(i,len(w)):
        # 옮긴 적 없고, 트럭 적재용량보다 작은 컨테이너
            if not used[j] and t[i] >= w[j]: 
                used[j] = 1 # 사용 표시
                max_sum += w[j]
                break

    print(f'#{tc} {max_sum}')

2. while문 사용

# 테스트 케이스 개수
T = int(input())
for tc in range(1, T + 1):
    # N : 컨테이너 수, M : 트럭수
    N, M = map(int, input().split())
    # N개의 화물 무게
    w = list(map(int, input().split()))
    # M개 트럭의 적재 용량
    t = list(map(int, input().split()))

    # 오름차순 정리
    w.sort(reverse=True)
    t.sort(reverse=True)

    # 화물 이동 가능 최대량
    max_sum = 0

    j = -1
    for i in range(M):
        while j < N-1:
            j += 1
            # 트럭 적재용량보다 작은 컨테이너
            if t[i] >= w[j]:
                max_sum += w[j]
                break
                
    print(f'#{tc} {max_sum}')
728x90
반응형

댓글