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
반응형
'TIL - 프로그래밍 > Python 알고리즘' 카테고리의 다른 글
[SWEA] 5203. 베이비진 게임 - Python (0) | 2022.03.29 |
---|---|
[SWEA] 5202. 화물 도크 - Python (0) | 2022.03.29 |
[SWEW] 5189. 전자카트 - Python (0) | 2022.03.29 |
[SWEA] 5188. 최소합 - Python (0) | 2022.03.29 |
[Python] baby-gin 재귀 (0) | 2022.03.27 |
댓글