2023년 01월 07일 토요일 - 자비로운 리트코드..
오늘 올려볼 문제는 134번 Gas Station 이라는 문제이다.
사진을 클릭하면 해당 문제로 이동합니다.
오늘도 LeetCode 사이트 오늘의 문제를 가지고 왔다.
너무 안좋게 풀었지만 일단 풀었으니...
입력
사진에서도 볼 수 있듯이 int 배열 2개가 입력으로 들어온다.
풀이 및 코드
주유소가 있고 해당 주유소만큼 가는데 들어가는 비용이 있다.
이 때 한 주유소에서 시계방향으로 모든 주유소를 돈다고 할 때 모든 주유소를 들를 수 있는 위치를 구하는 문제이다.
오늘은 처음부터 정답을 생각해냈다.
가스와 비용의 차이를 구해서 이를 pq에 넣고 가스가 더 많이 남는 곳부터 일일히 탐색했다.
이제 코드를 봐보자!
풀이코드
class Solution {
public int canCompleteCircuit(int[] gas, int[] cost) {
int n = gas.length;
var pq = new PriorityQueue<Point>((a, b) -> b.sum - a.sum);
for(int i = 0; i < n; i++) {
if(gas[i] - cost[i] >= 0) pq.add(new Point(i, gas[i] - cost[i]));
}
while(!pq.isEmpty()){
int index = pq.poll().index;
int sum = gas[index];
for(int i = 0; i < n; i++) {
sum -= cost[(index + i) % n];
if(sum < 0) break;
sum += gas[(index + i + 1) % n];
}
if(sum >= 0) return index;
}
return -1;
}
class Point{
int index, sum;
public Point(int index, int sum) {
this.index = index;
this.sum = sum;
}
}
}
제출 화면
오늘 나는 O(N^2)에 풀었지만 O(N)에 풀 수 있는 답이 있었다...
그걸보고 오늘 블로그를 쓸까말까 고민을 많이 했지만 일단 풀었으니... 올리긴 한다....
내일도 문제를 풀어서 블로그에 글을 쓸 수 있으면 좋겠다.