๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ

1863. ์Šค์นด์ด๋ผ์ธ ์‰ฌ์šด๊ฑฐ

Problem ๐Ÿ’ป

1863. ์Šค์นด์ด๋ผ์ธ ์‰ฌ์šด๊ฑฐ

 

์ž…๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์Šค์นด์ด๋ผ์ธ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

..........................
.....XX.........XXX.......
.XXX.XX.......XXXXXXX.....
XXXXXXXXXX....XXXXXXXXXXXX

 

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์—ฌ์„ฏ ๊ฐœ์˜ ๋นŒ๋”ฉ์ด ์žˆ์„ ๋•Œ๊ฐ€ ์ตœ์†Œ ๊ฐœ์ˆ˜์˜ ๋นŒ๋”ฉ์ด ์žˆ๋Š” ์ƒํ™ฉ์ด๋‹ค.

..........................
.....22.........333.......
.111.22.......XX333XX.....
X111X22XXX....XX333XXXXXXX

..........................
.....XX.........XXX.......
.XXX.XX.......5555555.....
4444444444....5555555XXXXX

..........................
.....XX.........XXX.......
.XXX.XX.......XXXXXXX.....
XXXXXXXXXX....666666666666

Approach 1 โญ•

  • ์Šคํƒ (00:32:10)

์Šคํƒ์œผ๋กœ ํ‘ธ๋Š” ๋ฌธ์ œ์˜€๋‹ค.

 

์ฒ˜์Œ์— ์Šคํƒ์ด๋ผ ์ƒ๊ฐ ๋ชปํ•˜๊ณ  ์ž…๋ ฅ๊ฐ’๋“ค์„ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ• ์ง€ ๊ณ ๋ฏผํ•ด๋ดค๋‹ค. ์ฒ˜์Œ์—” ์ง์‚ฌ๊ฐํ˜• ์ขŒํ‘œ๋ฅผ ์ด์šฉํ•ด์„œ ํ’€๋ ค๊ณ  ํ–ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 2, 2 ๋‹ค์Œ 5, 1์ด ๋‚˜์˜ค๋ฉด {(2, 2), (4, 1)} ์ขŒํ‘œ๋ฅผ ๊ฐ€์ง€๋Š” ์ง์‚ฌ๊ฐํ˜•์ด ํ•œ ๊ฐœ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด๋Š” ์‹์œผ๋กœ ํ’€๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ ์ด ๋ฐฉ๋ฒ•์€ ๋„“์ด๋ฅผ ๊ตฌํ• ๋• ์“ธ๋ชจ์žˆ์„์ง€ ๋ชฐ๋ผ๋„ ๊ฐฏ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š”๊ฑฐ๋ผ ๋งž๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐ™์ง€ ์•Š์•˜๋‹ค.

 

๊ทธ๋ฆฌ๊ณ , ๋‘ ๋ฒˆ์งธ๋กœ๋Š” ์ง€๊ธˆ์˜ ์ž…๋ ฅ๊ฐ’์ด 2, 2๋ฉด ์ด์ „ ์ž…๋ ฅ๊ฐ’ 1, 1๋ณด๋‹ค ํฌ๋‹ˆ๊นŒ ๊ณ„์† ์ง„ํ–‰ํ•˜๋‹ค๊ฐ€ 5, 1์ด ๋‚˜์™”์„ ๋•Œ ์ ์–ด๋„ ๋†’์ด 2์˜ ์ง์‚ฌ๊ฐํ˜•์ด ํ•˜๋‚˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ˆ +1 ํ•˜๋Š” ์‹์œผ๋กœ ๋งŒ๋“ค๋ ค๊ณ  ํ–ˆ๋‹ค. ์ด๋•Œ, ์Šคํƒ์„ ์‚ฌ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ ์Šคํƒ์„ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ•ด์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„๋ฅ˜๋ฅผ ํ™•์ธํ–ˆ๋‹ค.

 

์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์Šคํƒ์„ ์–ด๋–ป๊ฒŒ ์ด์šฉํ• ์ง€ ์•Œ์•„๋ณด์ž.

10
1 1
2 2
5 1
6 3
8 1
11 0
15 2
17 3
20 2
22 1

/**
..........................
.....XX.........XXX.......
.XXX.XX.......XXXXXXX.....
XXXXXXXXXX....XXXXXXXXXXXX
**/

 

์ผ๋‹จ ์ž…๋ ฅ๊ฐ’์€ ์Šค์นด์ด๋ผ์ธ์˜ ๊ณ ๋„๊ฐ€ ๋ฐ”๋€Œ๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ •๋ ฌํ•  ํ•„์š”๋Š” ์—†๋‹ค. ๊ทธ๋Ÿผ ์ˆœ์„œ๋Œ€๋กœ ์Šคํƒ์— ํ•œ๋ฒˆ ๋„ฃ์–ด๋ณด์ž.

 

 

(1, 1)์˜ ๊ฒฝ์šฐ ์Šค์นด์ด๋ผ์ธ์ด ์‹œ์ž‘๋˜๋Š” ์ขŒํ‘œ์ด๊ณ  ์•„์ง ์•„๋ฌด ์ •๋ณด๋„ ์—†์œผ๋‹ˆ ์ผ๋‹จ ์Šคํƒ์— ๋„ฃ๋Š”๋‹ค.

 

 

(2, 2)์˜ ๊ฒฝ์šฐ์—๋„ (1, 1)์˜ ์Šค์นด์ด๋ผ์ธ์ด ๋๋‚˜๋Š” ์ง€์ ์ด ์•„๋‹ˆ๋ฉฐ, ์ƒˆ๋กœ์šด ๋นŒ๋”ฉ์ด ๋ณด์ด๋Š” ๊ตฌ๊ฐ„์˜ ์‹œ์ž‘์ด๋ฏ€๋กœ ์Šคํƒ์— ๊ทธ๋Œ€๋กœ ๋„ฃ๋Š”๋‹ค.

 

 

(5, 1)์˜ ๊ฒฝ์šฐ ์ƒ๊ฐ์„ ์ข€ ํ•ด๋ด์•ผ ํ•œ๋‹ค. ์ผ๋‹จ (5, 1)์ด ๋“ฑ์žฅํ•œ ์ˆœ๊ฐ„ ๊ณ ๋„๊ฐ€ ๋‚ฎ์•„์ง€๋ฏ€๋กœ ๋†’์ด๊ฐ€ 1๋ณด๋‹ค ํฐ ๋นŒ๋”ฉ๋“ค์€ ๋ชจ๋‘ ๋นŒ๋”ฉ์˜ ๋์ด ์ •ํ•ด์ง„๋‹ค. ํ˜„์žฌ ์˜ˆ์ œ๋Š” ์•„๋‹ˆ์ง€๋งŒ ์•„๋ž˜ ๊ทธ๋ฆผ์œผ๋กœ ํ•œ๋ฒˆ ๋ณด์ž.

. . . .
. . x .
. x x .
x x x x

 

(1, 1)์ด ์ฃผ์–ด์ง€๊ณ , (2, 2), (3, 3)์ด ์ฐจ๋ก€๋Œ€๋กœ ์ฃผ์–ด์ ธ ์Šคํƒ์— ๋‹ด๊ฒจ์žˆ์œผ๋ฉด (4, 1)์˜ ๋“ฑ์žฅ์œผ๋กœ (2, 2)๋กœ ์‹œ์ž‘ํ•œ ๋นŒ๋”ฉ๊ณผ (3, 3)์œผ๋กœ ์‹œ์ž‘ํ•œ ๋นŒ๋”ฉ์€ ๋์ด ์ •ํ•ด์กŒ๋‹ค. ์ฆ‰, ๋นŒ๋”ฉ์˜ ๊ฐฏ์ˆ˜์— ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์Šคํƒ์—์„œ 1๋ณด๋‹ค ํฐ ๋นŒ๋”ฉ๋“ค์„ ๋ชจ๋‘ ์ œ๊ฑฐํ•ด์ฃผ๋ฉด (3, 3), (2, 2)๊ฐ€ ์ฐจ๋ก€๋Œ€๋กœ ๋‚˜์™€ ๋นŒ๋”ฉ ๊ฐฏ์ˆ˜๋Š” 2๊ฐœ๊ฐ€ ๋œ๋‹ค.

 

๋‹ค์‹œ ํ•ด๋‹น ์˜ˆ์ œ๋กœ ๋Œ์•„์™€ ์—ฌ๊ธฐ์„œ๋Š” (2, 2)๋กœ ์‹œ์ž‘ํ•œ ๋นŒ๋”ฉ์ด ์ •ํ•ด์ง„๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ (2, 2)๋ฅผ ๋นผ๊ณ  ๋นŒ๋”ฉ ๊ฐฏ์ˆ˜(ret++)๋ฅผ ํ•˜๋‚˜ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.

์ดํ›„์— ์ƒ๊ฐํ•ด๋ณผ ๊ฑฐ๋ฆฌ๊ฐ€ ๋˜ ํ•˜๋‚˜ ์žˆ๋‹ค. (5, 1)์„ ์Šคํƒ์— ๋„ฃ์–ด์•ผ ํ• ๊นŒ? ์•„๋‹ˆ๋ฉด ๊ทธ๋ƒฅ ๋ฒ„๋ ค๋„ ๋˜๋Š” ๊ฒƒ์ผ๊นŒ? ์ด๋ฅผ ์œ„ํ•ด ๋„ฃ๋Š”๋‹ค์™€ ๋„ฃ์ง€ ์•Š๋Š”๋‹ค ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ๋ฅผ ๋‹ค ์ƒ๊ฐํ•ด๋ณด์ž.

 

  • ๋„ฃ๋Š”๋‹ค.

 

  • ๋„ฃ์ง€ ์•Š๋Š”๋‹ค.

 

๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด ์œ„์˜ ๋‘ ๊ฒฝ์šฐ๋ฅผ ํ•˜๋‚˜์˜ ์‚ฌ์ง„์œผ๋กœ ํ‘œํ˜„ํ•˜์˜€๋‹ค. ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ๋„ฃ์ง€ ์•Š์œผ๋ฉด ๋งˆ์ง€๋ง‰ (22, 1) ๋นŒ๋”ฉ์˜ ๊ฒฝ์šฐ ์—†๋Š” ๋นŒ๋”ฉ ์ทจ๊ธ‰๋˜์–ด ์นด์šดํŒ…์— ๋“ค์–ด๊ฐ€์ง€ ์•Š๋Š”๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ๋งˆ์ง€๋ง‰์ด 0์ด ์•„๋‹Œ ๊ฒฝ์šฐ๋ผ๋ฉด ์ถ”๊ฐ€ ๋กœ์ง์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ ๋„ฃ๋Š” ๊ฒƒ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ๋” ํŽธํ•˜๋‹ค.

 

์œ„์˜ ๊ณผ์ •์„ ์ฝ”๋“œ๋กœ ํ‘œํ˜„ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ์ •๋‹ต์ด๋‹ค!


Solution ๐Ÿ’ก

public class BOJ_1863 {

    private static class Point {
        int x, y;

        public Point(int x, int y) {
            this.x = x;
            this.y = y;
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());

        int ret = 0;
        ArrayDeque<Point> skyline = new ArrayDeque<>();
        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int x = Integer.parseInt(st.nextToken());
            int y = Integer.parseInt(st.nextToken());

            if (skyline.isEmpty()) skyline.push(new Point(x, y));
            else {
                Point peek = skyline.peek();
                if (peek.y < y) skyline.push(new Point(x, y));
                else {
                    int tmp = 0;
                    while (!skyline.isEmpty() && skyline.peek().y > y) {
                        Point pop = skyline.pop();
                        if (pop.y != tmp) {
                            ret++;
                            tmp = pop.y;
                        }
                    }
                    if (y != 0) skyline.push(new Point(x, y));
                }
            }
        }

        int tmp = 0;
        while (!skyline.isEmpty()) {
            Point pop = skyline.pop();
            if (pop.y != tmp) {
                ret++;
                tmp = pop.y;
            }
        }
        System.out.println(ret);
    }
}