๋ฌธ์ ์ ๋ฆฌ
- ํธ๋ญ์ผ๋ก ๋ง์๊น์ง ์ด๋ ์ค 1KM๋ฅผ ์ด๋ ํ ๋๋ง๋ค 1L์ ์ฐ๋ฃ๊ฐ ๋น ์ ธ ๋๊ฐ๋ ์ํฉ
- ์ด๋ํ๋ ๊ณณ๊ณณ์ N๊ฐ์ ์ฃผ์ ์๊ฐ ์กด์ฌ
- ํธ๋ญ์ ์ถฉ์ ํ ๋ ๋ง๋ค ์ฐ๋ฃ๋ฅผ ์ถฉ๋ถํ ์ถฉ์ ํ ์ ์์.
- ๊ฐ ๊ฐ์ ์ฃผ์ ์ ์์น์ ์ฐ๋ฃ์ ์์ด ์ฃผ์ด ์ง ๋, ์ต์ํ์ผ๋ก ์ถฉ์ ํ๋ ํ์ ๊ตฌํ๊ธฐ
- ๋ง์์ ๋์ฐฉํ ์ ์๋ ๊ฒฝ์ฐ -1
์ ํ ์ฌํญ
- ์ ํ์ฌํญ 1: ์ฃผ์ ์ ๊ฐ์ 1 <= N <= 10,000
- ์ ํ์ฌํญ 2: ์ฃผ์ ์ ์์น 1 <= a <= 1,000,000
- ์ ํ์ฌํญ 3: ์ฃผ์ ์ ์ฐ๋ฃ 1 <= b <= 100
- ์ ํ์ฌํญ 4: ํ์ฌ ์์น์์ ๋ง์๊น์ง ๊ฑฐ๋ฆฌ 1 <= L <= 1,000,000
- ์ ํ์ฌํญ 5: ํ์ฌ ํธ๋ญ์ ์ฐ๋ฃ๋ 1 <= P <= 1,000,000
ํต์ฌ ํคํฌ์ธํธ
- ์ถฉ๋ถํ ๋ง์ด ์ถฉ์ -> ํ ๋ฒ์ ์ต๋ํ ๋ง์ ์ด์ต, ๊ทธ๋ฆฌ๋์ ํต์ฌ
ํต์ฌ ํฌ์ธํธ
- ๊ฑฐ๋ฆฌ์ ์ฐ๋ฃ ์ค ์ด๋ ๊ฒ์ ํฌ์ปค์ค๋ก ๋์ด์ผํ๋๊ฐ?
- ์์ฌํด์ผ ํ ํฌ์ธํธ 1: ๊ฐ์ฅ ๋ง์ ์ฐ๋ฃ๋ฅผ ์ป๋ ๊ฒ์ด ์ข์๊ฐ?
- ์์ฌํด์ผ ํ ํฌ์ธํธ 2: ๊ฐ์ฅ ๋ฉ๋ฆฌ์๋ ๊ฒ์ ํ๋ํ๋ ๊ฒ์ด ์ข์๊ฐ?
ํต์ฌ ๋ก์ง
- ํ ๋ฒ์ ์ด๋ ํ ์ ์๋ค๋ฉด, ์ฐ๋ฃ๋ฅผ ๊ตณ์ด ์ป์ ํ์๊ฐ ์๋ค.
- ํ์ฌ๊น์ง ์ด๋ํ ์ ์๋ ๊ฑฐ๋ฆฌ(total oil)๋ก ๋ง์๊น์ง ์ด๋ํ ์ ์๋ค๋ฉด, ๋ ์ด์ ์ฐ๋ฃ๊ฐ ํ์์๋ค.
- ๋ง์๊น์ง ์ด๋ํ ์ ์๋ค๋ฉด, ํ์ฌ๊น์ง ์ด๋ํ ์ ์๋ ๊ฑฐ๋ฆฌ ์ค ์ต๋์ ์ค์ผ์ ์ ํํ๋ค.
๊ฐ์ . ์ด๊ธฐ ์ฐ๋ฃ 3, ๋ชฉ์ ์ง 10
- ์ด๊ธฐ ์ฐ๋ฃ๋ก ์ด๋ํ ์ ์๋ ์์น๋ 3
- ๊ทธ ์ค ์ป์ ์ ์๋ ์ต๋ ์ฐ๋ฃ๋ 7
- ๋ ๋ง์ ์ผ์ด์ค๋ฅผ ์๊ฐํด์ Heap์ ํตํด ์ ์ฅ
ํ์ ๊ผญ ์ฌ์ฉํด์ผํ๋์?
- ๋งค๋ฒ ์ด๋ํ ์ ์๋ ๊ฑฐ๋ฆฌ ์ค ์ต๋๋ก ํ๋ํ ์ ์๋ ์ฐ๋ฃ๋ฅผ ์ ํํ๋ฉด ์๋๋์?
- ์ถ๊ฐ๋ก ์ด๋ํ ์ ์๋ ๊ฑฐ๋ฆฌ์์ ํ๋ํ๋ ์ฐ๋ฃ๋ณด๋ค ์ด์ ๊น์ง ์ด๋ํ ๊ฑฐ๋ฆฌ์์ ํ๋ํ๋ ์ฐ๋ฃ๊ฐ ๋ ๋ง์ ์ฐ๋ฃ๋ฅผ ์ ๊ณตํ ์ ์์.
import java.io.*;
import java.util.*;
public class Main {
static class Position {
int x;
int oil;
public Position(int x, int oil) {
this.x = x;
this.oil = oil;
}
}
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer st;
public static void main(String[] args) throws IOException {
int N = Integer.parseInt(br.readLine());
Position[] gasStations = new Position[N];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int oil = Integer.parseInt(st.nextToken());
gasStations[i] = new Position(x, oil);
}
// ์ ๋ ฌ๋์๋ค๋ ์ ์กฐ๊ฑด์ด ์์ผ๋ฏ๋ก ๊ฑฐ๋ฆฌ ์์ผ๋ก ์ ๋ ฌ
Arrays.sort(gasStations, (a, b) -> a.x - b.x);
st = new StringTokenizer(br.readLine());
int destination = Integer.parseInt(st.nextToken());
int currentOil = Integer.parseInt(st.nextToken());
int currentPos = 0;
int stationIndex = 0;
int stopCount = 0;
PriorityQueue<Integer> pq = new PriorityQueue<>((a, b) -> b - a);
// ๋ชฉ์ ์ง์ ๋์ฐฉํ ๋๊น์ง ๋ฐ๋ณต
while (currentPos + currentOil < destination) {
// ์ด๋ ํ ์ ์๋ ๊ฑฐ๋ฆฌ ๋ด ์ถฉ์ ํ ์ ์๋ oil์ ๋ชจ๋ ์ ์ฅ
int canMovingDistance = currentPos + currentOil;
while (stationIndex < N && gasStations[stationIndex].x <= canMovingDistance) {
pq.offer(gasStations[stationIndex].oil);
stationIndex++;
}
// ์ถฉ์ ํ ์ ์๋ oil์ด ์๋ค๋ฉด, ์ด๋ํ ์ ์์.
if (pq.isEmpty()) {
stopCount = -1;
break;
}
currentPos += pq.poll();
stopCount++;
}
System.out.println(stopCount);
}
}
๋ฌธ์ ์ถ์ฒ: https://www.acmicpc.net/problem/1826
'์๊ณ ๋ฆฌ์ฆ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ 9252] LCS2 (0) | 2025.04.08 |
---|---|
[BOJ 17406] ๋ฐฐ์ด ๋๋ฆฌ๊ธฐ 4 (0) | 2025.04.03 |
[BOJ 20207] ๋ฌ๋ ฅ (0) | 2025.03.31 |
๋ฐฑ์ค - [BOJ 22856] ํธ๋ฆฌ ์ํ (0) | 2024.07.08 |
๋ฐฑ์ค - [BOJ 1865] ์ํ (0) | 2024.07.06 |