문제 링크
코드
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에 더하는 방식을 이용했다.
- 처음에는 배열을 자르고, 두 배열이 모두 빌 때까지 반복하는 방식을 이용했지만 시간 초과가 나서 배열을 건들지 않고 인덱스만 바꾸는 방식으로 변경했다.
- 아이디어가 약간 필요했던 풀이였기 때문에 실제 문제로 나왔을 때 풀 수 있을지 확신할 수 없다. 최대한 많은 경험을 해보는 것이 좋겠다.