CS/알고리즘_문제풀이(파이썬)

운송 트럭

Jedy_Kim 2021. 8. 6. 16:36
728x90

문제 설명

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

입출력 예 설명

입출력 예 #1

앞서 설명한 예와 같습니다.

입출력 예 #2

모든 상품은 각각 다른 트럭에 들어갑니다.
두 번째 트럭을 호출하면 첫 번째 트럭은 목적지로 출발하므로, 세 번째 상품을 첫 번째 트럭에 넣을 수는 없습니다.

 

#코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def solution(max_weight, specs, names): 
    specs_dic = {} 
    truck_cnt = 1
    my_max    = max_weight
    
    
    for item in specs: 
        specs_dic[item[0]] = int(item[1])
     
    for idx in range(len(names) - 1): 
        my_max -= specs_dic[names[idx]]
        
        if my_max < specs_dic[names[idx+1]]:
            truck_cnt += 1
            my_max = max_weight
             
    return truck_cnt
cs

 

반응형

'CS > 알고리즘_문제풀이(파이썬)' 카테고리의 다른 글

방문 길이  (0) 2021.08.07
빙고  (0) 2021.08.07
나머지 한 점  (0) 2021.08.06
2020 KAKAO BLIND RECRUITMENT - 자물쇠와 열쇠  (0) 2021.08.06
파티  (0) 2021.08.04