Leetcode Java Minimum Number of Refueling Stops
업데이트:
문제
코드
class Solution {
public int minRefuelStops(int target, int startFuel, int[][] stations) {
Queue<Integer> queue = new PriorityQueue<>();
int i = 0;
int result = 0;
while (startFuel < target) {
while (i < stations.length && stations[i][0] <= startFuel) {
queue.offer(-stations[i++][1]);
}
if (queue.isEmpty()) {
return -1;
}
startFuel -= queue.poll();
result++;
}
return result;
}
}
결과
설명
- startFuel만큼 주유된 차량으로 stations의 주유소를 거쳐 target까지 도착하기까지 최소 주유 횟수를 구하는 문제이다.
- target까지 도착할 수 없는 경우, -1을 주어진 문제의 결과로 반환한다.
- stations[i] = [positioni, fueli]로, positioni는 주유소의 위치 fueli는 주유 용량을 의미한다.
- 1의 거리를 이동하기 위해 1의 주유 용량을 소모한다.
- 문제 풀이에 필요한 변수를 정의한다.
- queue는 현재 주유된 용량 내 도착할 수 있는 주유소의 주유 용량을 저장하기 위한 변수로, 주유 용량을 오름차순으로 정렬해서 저장하기 위해 PriorityQueue로 초기화한다.
- i는 stations의 탐색 위치를 저장할 변수로, 처음 위치인 0으로 초기화한다.
- result는 최소 주유 횟수를 저장하기 위한 변수로, 0으로 초기화한다.
- startFuel이 target이 되기 전까지 아래를 반복한다.
- i가 stations의 길이 미만으로 모두 탐색한 상태가 아니면서 stations[i][0]가 startFuel이하인 도착 가능한 주유소인 경우, queue에 해당 주유소의 주유 용량인 stations[i][1]을 음수로 넣어주고 i를 증가시킨다.
- queue가 비어있는 경우 target까지 도착하기 전에 주유된 용량을 모두 소모하므로, -1을 주어진 문제의 결과로 반환한다.
- startFuel에 queue에서 가장 작은 값을 꺼내 빼주고 result를 증가시킨다.
- 반복이 완료되면 최소 주유 횟수가 계산된 result를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기