2023년 01월 07일 토요일 - 자비로운 리트코드..


오늘 올려볼 문제는 134번 Gas Station 이라는 문제이다.


사진을 클릭하면 해당 문제로 이동합니다.

leetcode 문제 사진

오늘도 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;
        }
    }
}




제출 화면

leetcode 문제 맞았습니다


오늘 나는 O(N^2)에 풀었지만 O(N)에 풀 수 있는 답이 있었다...

그걸보고 오늘 블로그를 쓸까말까 고민을 많이 했지만 일단 풀었으니... 올리긴 한다....


내일도 문제를 풀어서 블로그에 글을 쓸 수 있으면 좋겠다.

+ Recent posts