
- 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에 있는 상품입니다.

- 일단 실어야 할 상품의 순서가 정해져 있으므로 앞에서 부터 채우다 트럭에 허용 무게를 넘게 되면 출발하면 된다. 뒷 순서의 상품이 무게가 작다고 해서 앞으로 꺼낼 필요는 없으므로 간단하게 구현할 수 있다.
specs를 딕셔너리 형태로 바꾸면 더 쉽게 할 수 있다.
<구현>
1.specs를 딕셔너리 형태로 바꾼dic을 만들고, 대기 중인 트럭에 적재된 무게를0이라고 설정한다.
2.names에 요소들을 하나씩 꺼내어 요소를 키 값으로dic에서 해당 상품의 무게를 추출.
3. 허용 무게를 넘지 않을 때만 트럭에 물건을 추가
4. 허용 무게를 넘긴다면 대기 중인 트럭을 보내고(answer += 1), 새로운 트럭에 물건을 추가(curr_w = weight)
def solution(max_weight, specs, names):
dic = dict(specs)
curr_w = 0
answer = 1
for item in names:
weight = int(dic[item])
if curr_w + weight <= max_weight:
curr_w += weight
else:
answer += 1
curr_w = weight
return answer