https://leetcode.com/problems/gas-station/
풀이
class Solution(object):
def canCompleteCircuit(self, gas, cost):
# 만약 gas의 총 합이 cost의 총 합보다 작다는 것은, 어느 칸에서든 한 바퀴를 못돈다는 것이다.
if sum(gas) < sum(cost):
return -1
# start는 인덱스 번호, fuel은 누적된 가스의 양
start, fuel = 0, 0
for i in range(len(gas)):
# 현재 인덱스에서 다음 인덱스로 가지 못하면,
# start를 다음 인덱스로 지정해주고 fuel은 0으로 초기화
if gas[i] + fuel < cost[i]:
start = i + 1
fuel = 0
# 갈 수 있는 경우, fuel에 값을 저장
else:
fuel += gas[i] - cost[i]
return start
해설
- 생각을 해보면 총 가스의 양이 총 비용보다 낮으면 어느 위치에서 출발하던지 한 바퀴를 돌 수가 없다.
- 이 경우 바로 -1을 return
- 밑의 과정이 설명하자면 복잡한데, 직접 그려보며 생각해본다면 이해할 수 있다.
- for문에 온 상태라는 것은, 한 바퀴를 돌 수 있는 정류장이 하나 이상은 존재한다는 것이다.
- 이 점을 잘 생각해서 코드를 짜면 된다.
'리트코드' 카테고리의 다른 글
리트코드 417 Pacific Atlantic Water Flow (파이썬) (0) | 2022.10.09 |
---|---|
리트코드 127 Word Ladder (파이썬) (0) | 2022.10.08 |
리트코드 787 Cheapest Flights Within K Stops (0) | 2022.10.01 |
리트코드 743 Network Delay Time (파이썬) (0) | 2022.10.01 |
리트코드 207 Course Schedule (파이썬) (0) | 2022.09.24 |