치즈의 AI 녹이기

[코테 공부] 프로그래머스 택배 배달과 수거하기 본문

인공지능 대학원생의 생활/동료 코드 따라잡기

[코테 공부] 프로그래머스 택배 배달과 수거하기

개발자 치즈 2023. 4. 26. 01:34

다른 사람의 풀이를 보아하니, 많이 헤매다가 답을 찾은 느낌이었다. 

나 또한 테스트 케이스는 다 통과했는데, 정작 코드 제출하니 다 실패하는 경우가 있었고, 

결국에는 해답을 보며 한 줄 씩 해석해보았다.. 쉽지 않았던 문제;

 

언제나 '막상 내가 혼자 풀면 이런 발상을 할 수 있을까?'가 제일 고민이 되는데

많이 경험할수록 나아질 것이라고 생각한다. 화이팅!

from collections import deque

def solution(cap, n, deliveries, pickups):
    # 1,2,3번째 집 먼저 해결하고, 4, 5번째 집 나중에 가면 안되나?
    # 이 예시에서는 괜찮아도, 다른 예시에서는 안될 수 있음.
    # 결국 가장 먼 집부터 배달 수거하는 게 이득.-> greedy 문제 
    
    # 배달과 수거는 동시에 가능, 왔다 갔다 거리 *2만 해주면 됨.
    d_val, p_val = 0,0
    answer = 0

    houses = deque([(d,p) for d, p in zip(deliveries, pickups)])
    # print(houses)
    for i in range(n):
        # 먼 집부터 방문하여 방문 수거 목록 업데이트 
        d_val += houses[n-i-1][0]
        p_val += houses[n-i-1][1]
        # 방문 수거할 박스가 남아 있다면 계속 반복
        while p_val > 0 or d_val > 0:
            # 트럭 최대치만큼 뻬줌. 
            d_val -= cap
            p_val -= cap
            # 만약, d_val, p_val이 0일 경우, 
            # 해당 집은 방문 수거가 완료 & 트럭 여유 없음 & 거리 업데이트 불필요. 
            
            # 만약 d_val, p_val이 0보다 작을 경우, 
            # 해당 집은 방문 수거가 완료 & 트럭 여유 있음 & 거리 업데이트 불필요. 
            
            # 그렇지 않으면,
            # 거리 업데이트 필요. 
            answer += 2 * (n-i)
        # print(d_val, p_val, answer)
    return answer