GarbageCollection

Published at 2023-02-12

class Solution:
    def garbageCollection(self, garbage: List[str], travel: List[int]) -> int:
        def calculate(garbageType, value):
            truck[garbageType][0] += value + truck[garbageType][1]
            truck[garbageType][1] = 0  # 다음번에 또 쓰레기가 있으면 그땐 현재 위치부터 다음 쓰레기가 있는 위치까지의 거리만 계산해줘야 해서, 초기화해줌
            return
            
        travel.insert(0, 0)  # garbage랑 인덱스 맞추려고 첫칸에 추가
        truck = {'G':[0, 0], 'P':[0, 0], 'M':[0, 0]}  # 각 트럭별 [쓰레기점수, 걸린시간]
        for i, g in enumerate(garbage):
            for truckType in ['G', 'P', 'M']:
                truck[truckType][1] += travel[i]
            paper, glass, metal = g.count('P'), g.count('G'), g.count('M')
            if paper:
                calculate('P', paper)
            if glass:
                calculate('G', glass)
            if metal:
                calculate('M', metal)
            
        res = 0
        for v in truck.values():
            res += v[0]
        return res