본문 바로가기
Data structure & Algorithm/Programmers

[Programmers] 운송 트럭(Python)

by LydiaRyu 2022. 10. 9.
반응형

프로그래머스 레벨 1 운송 트럭 (Python)

 

 

📒 문제 설명

 

문제 설명
XX 회사는 트럭을 이용해 상품을 운반합니다. 트럭은 최대 무게가 한정되어있습니다. 직원은 트럭에 상품을 순서대로 실으며, 상품을 실을 수 없는 트럭은 바로 목적지로 출발합니다. 이때 우리는 모든 상품을 운반하는데 필요한 트럭은 최소 몇 대인지 구하려 합니다.

예를 들어, 각 상품의 스펙이 다음과 같고, 트럭의 허용 무게가 300, 실어야 할 상품이 ["toy", "snack", "snack"]라고 합니다.

상품 이름     무게
toy                70
snack           200

이 경우 첫째 상품과 둘째 상품은 같은 트럭에 들어가지만, 셋째 상품은 다른 트럭에 넣어야 합니다. 따라서 필요한 트럭 수는 두 대 입니다.
상품       누적 무게    새 트럭
toy          70               불필요
snack     270             불필요
snack     200             필요

트럭의 허용 무게 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에 있는 상품입니다.

 

입출력 예시

 

max_weight     specs                                              names                                return
300                [["toy", "70"], ["snack", "200"]]           ["toy", "snack", "snack"]        2
200                [["toy", "70"], ["snack", "200"]]           ["toy", "snack", "toy"]             3

 

 

😃 문제 풀이

 

def solution(max_weight, specs, names):
    answer = 1
    sum_val = 0
    # 해당하는 이릉의 값만 가지고 오기 위해 Dictionary로 만들기
    dict_specs = dict(specs)
    
    for name in names:
        sum_val += int(dict_specs[name])  
        if max_weight <  sum_val:
            answer += 1
            sum_val = int(dict_specs[name])               
    return answer

 

  • names와 일치하는 상품의 상품 무게를 가져오기 위해서 dict 함수를 사용하여 딕셔너리 형태로 만들어 준다. 
  • sum_val라는 변수를 만들어서 상품 무게가 max_weight에 도달할 때까지 상품 무게를 누적한다.
  • max_weight 보다 상품의 누적 무게(sum_val) 값이 커지면 더 이상 상품을 실을 수 없으므로 트럭 1대로 계산하고, sum_val은 현재 무게로 초기화시킨다. 
  • 이렇게 무게가 max_weight을 기준으로 무게를 누적한 뒤 트럭의 개수를 추가하면, 마지막 남은 무게에 1대의 트럭을 계산해야 하므로 answer의 초기값을 1로 두어 마지막 1대를 추가한 상태로 계산을 한다.
728x90

댓글