Java

[백준 1826] 연료 채우기 (JAVA)

iheeeee6-6 2023. 3. 28. 13:46
728x90

https://www.acmicpc.net/problem/1826

 

1826번: 연료 채우기

첫째 줄에 주유소의 개수 N(1 ≤ N ≤ 10,000)가 주어지고 두 번째 줄부터 N+1번째 줄 까지 주유소의 정보가 주어진다. 주유소의 정보는 두개의 정수 a,b로 이루어 져 있는데 a(1 ≤ a ≤ 1,000,000)는 성경

www.acmicpc.net

 

주유소 정보는 거리순으로 주어지지 않기 때문에 우선순위 큐에 정보를 넣고 오름차순 정렬하였다.

 

현재 연료로 갈 수 있는 주유소까지의 최대 기름을 큐에 넣고는 하나씩 꺼내서 나아간다!

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {
	static int n, l, p;

	public static class Distance implements Comparable<Distance> {
		int a;
		int b;

		Distance(int a, int b) {
			this.a = a;
			this.b = b;
		}

		@Override
		public int compareTo(Distance o) {
			return this.a - o.a;
		}
	}

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		n = Integer.parseInt(br.readLine());
		PriorityQueue<Distance> q= new PriorityQueue<>();
		StringTokenizer st;
		for (int i = 0; i < n; i++) {
			st = new StringTokenizer(br.readLine());
			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());
			q.add(new Distance(a,b));
		}
		
		st = new StringTokenizer(br.readLine());
		l = Integer.parseInt(st.nextToken());
		p = Integer.parseInt(st.nextToken());
		
		PriorityQueue<Integer> pq = new PriorityQueue(Collections.reverseOrder());

		int count=0;
		while (p < l) {

			while(!q.isEmpty()&& q.peek().a<=p) {
				pq.add(q.poll().b);
			}
			
			if(pq.isEmpty()) {
				count=-1;
				break;
			}
			count++;
			p+=pq.poll();
		}
		System.out.println(count);
	}

}

'Java' 카테고리의 다른 글

[백준 7569] 토마토 (JAVA)  (0) 2023.03.28
[백준 2636] 치즈 (JAVA)  (0) 2023.03.28
[백준 6588] 골드바흐의 추측 (JAVA)  (0) 2023.03.25
[백준 15711] 환상의 짝꿍 (JAVA)  (0) 2023.03.24
[백준 2485] 가로수 (JAVA)  (0) 2023.03.23