๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[BOJ 1826] ์—ฐ๋ฃŒ ์ฑ„์šฐ๊ธฐ

by ๐Ÿณ Laboon 2025. 3. 31.

๋ฌธ์ œ ์ •๋ฆฌ

  • ํŠธ๋Ÿญ์œผ๋กœ ๋งˆ์„๊นŒ์ง€ ์ด๋™ ์ค‘ 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

  1. ์ดˆ๊ธฐ ์—ฐ๋ฃŒ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์œ„์น˜๋Š” 3
  2. ๊ทธ ์ค‘ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์—ฐ๋ฃŒ๋Š” 7
  3. ๋” ๋งŽ์€ ์ผ€์ด์Šค๋ฅผ ์ƒ๊ฐํ•ด์„œ 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