이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다.
문제 정의
주유소를 원형 큐에서 시계방향으로 돌 때, 현재 채울 수 있는 gas와 다음 주유소의 cost로 모든 주유소에 도달할 수 있는 시작점 출력
책에서 구현된 코드
from typing import List
class Solution:
def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:
# 모든 주유소 방문 가능 여부 판별
if sum(gas) < sum(cost):
return -1
start, fuel = 0, 0
for i in range(len(gas)):
# 출발점이 안되는 지점 판별
if gas[i] + fuel < cost[i]:
start = i + 1
fuel = 0
else:
fuel += gas[i] - cost[i]
return start
기억해야할 기법
- 조건에 맞는 풀이
- 정답인 출발점이 유일하므로, n번의 탐색으로 확인 가능
- 속도가 70ms 정도 나옴
내가 구현한 코드
from typing import List
class Solution:
def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:
N = len(cost)
gas += gas
cost += cost
for s in range(N):
has = 0
for e in range(s, s+N):
has += gas[e] - cost[e]
if has < 0:
break
if has >= 0:
return s
return -1
- O(n^2)이며 런타임이 2000ms이 넘어, 위 코드보다 20배 이상 오래걸린다
'책읽기' 카테고리의 다른 글
[파이썬 알고리즘 인터뷰] 14장 - 트리 (0) | 2021.09.13 |
---|---|
[파이썬 알고리즘 인터뷰][그리디] 쿠키 부여 (0) | 2021.09.01 |
[파이썬 알고리즘 인터뷰][그리디] 태스크 스케줄러 (0) | 2021.09.01 |
[파이썬 알고리즘 인터뷰][그리디] 키에 따른 대기열 재구성 (0) | 2021.08.30 |
[파이썬 알고리즘 인터뷰][그리디] 주식을 사고팔기 가장 좋은 시점2 (0) | 2021.08.30 |