ALGORITHM ๐Ÿค–/Baekjoon

๋ฐฑ์ค€ - 1911

daxx0ne 2023. 5. 11. 11:38

[Silver I] ํ™๊ธธ ๋ณด์ˆ˜ํ•˜๊ธฐ - 1911

๋ฌธ์ œ ๋งํฌ

์„ฑ๋Šฅ ์š”์•ฝ

๋ฉ”๋ชจ๋ฆฌ: 39268 KB, ์‹œ๊ฐ„: 852 ms

๋ถ„๋ฅ˜

์ •๋ ฌ, ์Šค์œ„ํ•‘

๋ฌธ์ œ ์„ค๋ช…

์–ด์ ฏ๋ฐค ๊ฒจ์šธ ์บ ํ”„ ์žฅ์†Œ์—์„œ ์›”๋“œ ๋ณธ์›๊นŒ์ง€ ์ด์–ด์ง€๋Š”, ํ™์œผ๋กœ ๋œ ๋น„๋ฐ€๊ธธ ์œ„์— ํญ์šฐ๊ฐ€ ๋‚ด๋ ค์„œ N (1 <= N <= 10,000) ๊ฐœ์˜ ๋ฌผ์›…๋ฉ์ด๊ฐ€ ์ƒ๊ฒผ๋‹ค. ์›”๋“œํ•™์›์€ ๋ฌผ์›…๋ฉ์ด๋ฅผ ๋ฎ์„ ์ˆ˜ ์žˆ๋Š” ๊ธธ์ด L (L์€ ์–‘์˜ ์ •์ˆ˜) ์งœ๋ฆฌ ๋„๋นค์ง€๋“ค์„ ์ถฉ๋ถ„ํžˆ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์„œ, ์ด๋“ค๋กœ ๋‹ค๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด ๋ฌผ์›…๋ฉ์ด๋“ค์„ ๋ชจ๋‘ ๋ฎ์œผ๋ ค๊ณ  ํ•œ๋‹ค. ๋ฌผ์›…๋ฉ์ด๋“ค์˜ ์œ„์น˜์™€ ํฌ๊ธฐ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๋ชจ๋“  ๋ฌผ์›…๋ฉ์ด๋“ค์„ ๋ฎ๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋„๋นค์ง€๋“ค์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜์—ฌ๋ผ.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N๊ณผ L์ด ๋“ค์–ด์˜จ๋‹ค.

๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N+1๋ฒˆ์งธ ์ค„๊นŒ์ง€ ์ด N๊ฐœ์˜ ์ค„์— ๊ฐ๊ฐ์˜ ์›…๋ฉ์ด๋“ค์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์›…๋ฉ์ด์˜ ์ •๋ณด๋Š” ์›…๋ฉ์ด์˜ ์‹œ์ž‘ ์œ„์น˜์™€ ๋ ์œ„์น˜๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค. ๊ฐ ์œ„์น˜๋Š” 0์ด์ƒ 1,000,000,000์ดํ•˜์˜ ์ •์ˆ˜์ด๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๋ชจ๋“  ๋ฌผ์›…๋ฉ์ด๋“ค์„ ๋ฎ๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋„๋นค์ง€๋“ค์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(); // ๋ฌผ์›…๋ฉ์ด ๊ฐœ์ˆ˜
        int l = sc.nextInt(); // ๋„๋นค์ง€ ๊ธธ์ด
        int minPlank = 0; // ๋„๋นค์ง€๋“ค์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜
        int x = 0; // ์ด์ „์— ๋†“์€ ๋„๋นค์ง€์˜ ๋ ์œ„์น˜
        int[][] puddle = new int[n][2]; // ๋ฌผ์›…๋ฉ์ด์˜ ์‹œ์ž‘ ์œ„์น˜์™€ ๋ ์œ„์น˜๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด

        // ๋ฌผ์›…๋ฉ์ด ์‹œ์ž‘ ์œ„์น˜์™€ ๋ ์œ„์น˜ ์ž…๋ ฅ ๋ฐ›๊ธฐ
        for (int i = 0; i < n; i++) {
            puddle[i][0] = sc.nextInt();
            puddle[i][1] = sc.nextInt();
        }

        // ๋ฌผ์›…๋ฉ์ด ์‹œ์ž‘ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
        Arrays.sort(puddle, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                if (o1[0] == o2[0]) {
                    return Integer.compare(o1[1], o2[1]);
                }
                return Integer.compare(o1[0], o2[0]);
            }
        });

        // ๊ฐ ๋ฌผ์›…๋ฉ์ด๋ฅผ ๋ฎ๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋„๋นค์ง€ ๊ฐœ์ˆ˜ ๊ณ„์‚ฐ
        for (int i = 0; i < n; i++) {
            if (puddle[i][0] > x) { // ์‹œ์ž‘์œ„์น˜๊ฐ€ ๋ฒ”์œ„๋ณด๋‹ค ํด ๊ฒฝ์šฐ
                x = puddle[i][0];
            }
            if (puddle[i][1] >= x) { // ๋์œ„์น˜๊ฐ€ ๋ฒ”์œ„๋ณด๋‹ค ํด ๊ฒฝ์šฐ
                while (puddle[i][1] > x) {
                    x += l;
                    minPlank++;
                }
            }
        }

        System.out.println(minPlank);
    }
}