Algorithm/LeetCode

134. Gas Station

땅다람쥐 2022. 1. 26. 02:49

문제

  • n개의 주유소가 순환 루트에 있다.
  • 주어진 Gas와 Cost를 사용해서 한 바퀴를 돌 수 있는 인덱스를 찾기
  • 만약에 없다면 -1 리턴하기.

해결방법

  • 계속 여행을 할 수 있는 조건은 gas[i] - cost[i+1]가 0보다 클 때
  • 그래서 모든 gas[i] - cost[i+1]를 더한 값이 0 보다 작으면 -1 그렇지 않을 경우에는 한 바퀴를 돌 수 있다.
  • 그리고 gas[i] - cost[i+1]의 값과 잔여 연료의 값을 더 했을 때 0 보다 큰 값이 나오면 거기서부터 한 바퀴를 돌 수 있다.
int fuel = 0;
int size = gas.length;
for (int i = 0; i < size; i++){
	fuel += gas[i] - cost[i];
}
        
if (fuel < 0) {
	return - 1;
}

모든 gas[i] - cost[i+1]을 fuel에 더해주고 그 값이 0 보다 작으면 -1 리턴.

 

        int curGas = 0;
        int startPosition = 0;
        
        for (int i = 0; i < size; i++) {
            int curCost = gas[i] - cost[i];
            if (curCost + curGas < 0) {
                startPosition = i + 1;
                curGas = 0;
                
            } else {
                curGas += curCost;
            }
        }
        return startPosition;

매번 새로운 Cost 값 (gas[i] - cost[i])을 구해주는데, cost를 잔여 gas와 더 했을 때 0 보다 크면 계속 축적 아니면 i의 gas station에서 한 바퀴 도는게 불가능해진다. 그래서 스타팅 포지션을 +1 해주고 잔여 연료를 0으로 초기화 시켜준다.

 

 

'Algorithm > LeetCode' 카테고리의 다른 글

860. Lemonade Change  (0) 2023.09.13
33. Search in Rotated Sorted Array  (0) 2022.01.23
605. Can Place Flowers  (0) 2022.01.19
167. Two Sum II - Input Array Is Sorted  (0) 2022.01.11
1010. Pairs of Songs With Total Durations Divisible by 60  (0) 2022.01.03