[프로그래머스 알고리즘 스터디] 2주차 - 운송 트럭
문제 설명 📑
XX 회사는 트럭을 이용해 상품을 운반합니다. 트럭은 최대 무게가 한정되어있습니다. 직원은 트럭에 상품을 순서대로 실으며, 상품을 실을 수 없는 트럭은 바로 목적지로 출발합니다. 이때 우리는 모든 상품을 운반하는데 필요한 트럭은 최소 몇 대인지 구하려 합니다. 예를 들어, 각 상품의 스펙이 다음과 같고, 트럭의 허용 무게가 300, 실어야 할 상품이 [“toy”, “snack”, “snack”]라고 합니다.
이 경우 첫째 상품과 둘째 상품은 같은 트럭에 들어가지만, 셋째 상품은 다른 트럭에 넣어야 합니다. 따라서 필요한 트럭 수는 두 대 입니다.
트럭의 허용 무게 max_weight와 상품의 스펙을 담은 배열 specs, 운반할 상품의 이름이 순서대로 들은 배열 names가 주어집니다. 이때, 상품을 순서대로 운반하기 위해 필요한 트럭 수를 리턴하는 함수, soution을 완성하세요.
제한사항 🚫
max_weight는 1 이상 100,000 이하입니다. specs의 길이는 1 이상 100,000 이하입니다. specs의 원소는 [상품 이름, 상품 무게]를 나타냅니다. 상품 이름은 길이가 1 이상 10,000 이하인 문자열입니다. 상품 무게는 1 이상 max_weight 이하인 자연수를 나타내는 문자열입니다. 이름이 같은 상품은 없습니다. names는 길이가 1 이상 10,000 이하인 배열입니다. names의 원소는 모두 specs에 있는 상품입니다.
문제 풀이 👩🏻💻
리뷰 반영 전
리뷰 반영 후
- 순회를 돌며 dictionary에 값을 추가하지 않고 dict(specs)로 바로 dictionary로 변환하는 것으로 수정
풀이
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
# 운송 트럭
def solution(max_weight, specs, names):
answer = 0
specs_dict = {}
weight = 0
# 물건 이름과 무게를 dictionary로 생성
specs_dict = dict(specs)
# names 배열 순회
for name in names:
# specs_dict에서 name에 해당하는 무게를 weight에 추가
weight += int(specs_dict[name])
# 만약 무게들의 합이 max_weight를 초과하면
if weight > max_weight:
# 트럭 대수에 1을 추가
answer += 1
# weight를 name에 해당하는 무게로 초기화
weight = int(specs_dict[name])
# 반복문에서 빠져나온 뒤 마지막 물건의 트럭 대수 1을 추가
answer += 1
return answer