해당 문제의 주요 포인트는 아래와 같다.
function canCompleteCircuit(gas: number[], cost: number[]): number {
// 전체 가스량이 전체 비용보다 작으면 순회 불가능
const totalGas = gas.reduce((sum, curr) => sum + curr, 0);
const totalCost = cost.reduce((sum, curr) => sum + curr, 0);
if (totalGas < totalCost) return -1;
let startIndex = 0; // 시작 인덱스
let tank = 0; // 현재 탱크의 가스량
// 모든 주유소를 순회
for (let i = 0; i < gas.length; i++) {
// 현재 위치에서의 가스 잔량 계산
// (현재 탱크 + 현재 주유소 가스량 - 다음 주유소까지의 비용)
tank += gas[i] - cost[i];
// 가스가 부족하면 (음수가 되면)
if (tank < 0) {
// 다음 주유소부터 다시 시작
startIndex = i + 1;
// 탱크 리셋
tank = 0;
}
}
return startIndex;
}