Open ericagong opened 1 year ago
최소거리 키워드가 나오면 그리디 / 최단거리 알고리즘 을 떠올리기 굳이 Array.prototype.pop(), Array.prototype.shift() 등의 연산이 필요치 않고 포인터로만 처리할 수 있는지 고민해보기!
최소거리
그리디
최단거리 알고리즘
Array.prototype.pop()
Array.prototype.shift()
택배배달과 수거하기
한 번 트럭 이동 거리 = 수거/배달 중 길이가 긴 거리 * 2
function remove_zeros(arr) { for (let i = arr.length - 1; i >= 0; i--) { if (arr[i] !== 0) break; else arr.pop(); } }
function move_truck(arr, cap) { let space = cap; while (arr.length > 0) { const curr = arr.pop(); if (curr <= space) { space -= curr; } else { arr.push(curr - space); space = 0; break; } } }
function solution(cap, n, deliveries, pickups) { remove_zeros(deliveries); remove_zeros(pickups);
let distance = 0; while (deliveries.length > 0 || pickups.length > 0) { const d = Math.max(deliveries.length, pickups.length); distance += 2 * d;
move_truck(deliveries, cap); move_truck(pickups, cap);
}
return distance; }
### ✅ 2차 풀이: 포인터
⭐ 성찰
❓ 문제 상황
택배배달과 수거하기
👨💻 문제 해결
✅ 1차 풀이: 스택을 이용한 그리디
한 번 트럭 이동 거리 = 수거/배달 중 길이가 긴 거리 * 2
function move_truck(arr, cap) { let space = cap; while (arr.length > 0) { const curr = arr.pop(); if (curr <= space) { space -= curr; } else { arr.push(curr - space); space = 0; break; } } }
function solution(cap, n, deliveries, pickups) { remove_zeros(deliveries); remove_zeros(pickups);
let distance = 0; while (deliveries.length > 0 || pickups.length > 0) { const d = Math.max(deliveries.length, pickups.length); distance += 2 * d;
}
return distance; }