[PS] 택배 배달과 수거하기

owo·2023년 2월 9일
0

PS

목록 보기
17/25

문제 링크

코드

def solution(cap, n, deliveries, pickups):
    answer = 0
    
    ddist = convert(deliveries)
    pdist = convert(pickups)
    
    didx = len(ddist) - 1
    pidx = len(pdist) - 1
    
    while didx >= 0 or pidx >= 0:
        dval = ddist[didx] if didx >= 0 else 0
        pval = pdist[pidx] if pidx >= 0 else 0
        answer += max(dval, pval)
        
        didx -= cap
        pidx -= cap
            
    return answer * 2


def convert(arr):
    converted = []
    for i, v in enumerate(arr):
        converted += [i + 1] * v
    return converted

리뷰

  • 결국 문제를 요약하면 모든 택배를 배달/수거할 때까지, 가장 먼곳부터 택배를 배달/수거하면 된다.
  • 결국 얼마만큼 거리에 몇개의 택배가 있는지 여부가 중요하기 때문에 ddist, pdist라는 값에 거리라는 값을 개수만큼 넣어주고, n개씩 끊어서 더 먼 거리만큼 answer에 더하는 방식을 이용했다.
  • 처음에는 배열을 자르고, 두 배열이 모두 빌 때까지 반복하는 방식을 이용했지만 시간 초과가 나서 배열을 건들지 않고 인덱스만 바꾸는 방식으로 변경했다.
  • 아이디어가 약간 필요했던 풀이였기 때문에 실제 문제로 나왔을 때 풀 수 있을지 확신할 수 없다. 최대한 많은 경험을 해보는 것이 좋겠다.

0개의 댓글