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

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

14658. ํ•˜๋Š˜์—์„œ ๋ณ„๋˜ฅ๋ณ„์ด ๋น—๋ฐœ์นœ๋‹ค

Problem ๐Ÿ’ป

๋‹จ์ˆœํ•œ ๋ธŒ๋ฃจํŠธํฌ์Šค ๋ฌธ์ œ์ง€๋งŒ ์–ด๋–ป๊ฒŒ ํ’€์–ด์•ผํ• ์ง€ ์ข€ ๊ณ ๋ฏผํ•ด๋ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.


 

Approach 1 โŒ

  • ์ขŒํ‘œ ์™„์ „ ํƒ์ƒ‰
  • ๋ณ„ ๊ธฐ์ค€์œผ๋กœ ์™„์ „ ํƒ์ƒ‰

์ฒ˜์Œ ํ’€์ด๋Š” 2๊ฐ€์ง€์˜€๋‹ค. ์ขŒํ‘œ ์™„์ „ ํƒ์ƒ‰๊ณผ ๋ณ„ ๊ธฐ์ค€ ์™„์ „ ํƒ์ƒ‰.

 

์ขŒํ‘œ ์™„์ „ ํƒ์ƒ‰์€ (1, 1)๋ถ€ํ„ฐ (M-L, N-L)๊นŒ์ง€ x ~ x+L, y ~ y+L ์‚ฌ์ด์˜ ๊ฒน์น˜๋Š” ์ขŒํ‘œ๊ฐ€ ์žˆ๋Š”์ง€ ํ•˜๋‚˜ํ•˜๋‚˜์”ฉ ์ฐพ์•„์„œ ์ตœ๊ณ ๊ฐ’์„ ๊ฐฑ์‹ ํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ํ•˜์ง€๋งŒ, ๋ฌธ์ œ์˜ ์กฐ๊ฑด์— N, M์€ ์ตœ๋Œ€ 500,000์œผ๋กœ ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ ‡๊ฒŒ ํ•  ๊ฒฝ์šฐ L = 1์ธ ์ตœ์•…์˜ ๊ฒฝ์šฐ 500,000 * 500,000์œผ๋กœ 2500์–ต ๊ฐ€๊นŒ์ด ๋˜๋Š” ์—ฐ์‚ฐ์ด ์ผ์–ด๋‚œ๋‹ค. ๋‹น์—ฐํžˆ ์‹œ๊ฐ„์ดˆ๊ณผ์ด๋‹ค.

 

๊ทธ๋ž˜์„œ ์ƒ๊ฐํ•œ ๋ฐฉ๋ฒ•์ด ๋ณ„ ๊ธฐ์ค€์œผ๋กœ ์™„์ „ ํƒ์ƒ‰์ด๋‹ค. ์ฒ˜์Œ์—” ๋ณ„ ์ขŒํ‘œ ๊ธฐ์ค€์œผ๋กœ x ~ x+L, y ~ y+L ๊นŒ์ง€ ๊ฒน์น˜๋Š” ๋ณ„๋“ค ์ค‘ ์ตœ๋Œ€๊ฐ’์œผ๋กœ ๊ตฌํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์ œ1, 2, 3, 4 ์‚ฌ๋ถ„๋ฉด์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ตฌํ•˜๋Š” ๊ฒƒ์ด ๋ฐ˜๋ก€์— ๊ฑธ๋ฆฌ์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ ๊ฐ ๋ณ„์˜ ์ขŒํ‘œ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํ•œ ์ œ 1, 2, 3, 4 ์‚ฌ๋ถ„๋ฉด์„ ๊ตฌํ•ด ์ตœ๋Œ€๊ฐ’์„ ์ฐพ๋„๋ก ํ•˜์˜€๋‹ค. ๊ทผ๋ฐ ์ด ๋ฐฉ๋ฒ•์€ ๋ฐ˜๋ก€๊ฐ€ ์žˆ๋‹ค.

 

. * .
* . *
. * .

 

์œ„์™€ ๊ฐ™์€ ๋ณ„ ์œ„์น˜๊ฐ€ ์ฃผ์–ด์ง€๊ณ  L์ด 3์ด๋ผ๋ฉด (1, 1)์— ํŠธ๋žจํŽ„๋ฆฐ์„ ๋‘๋Š” ๊ฒƒ์ด ๋ชจ๋“  ๋ณ„์„ ๋‹ค ํŠ•๊ฒจ๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋ฐฉ๊ธˆ ๋กœ์ง์œผ๋กœ๋Š” ์ตœ๋Œ€ 3๊ฐœ๊นŒ์ง€์˜ ๋ณ„๋งŒ ํŠ•๊ฒจ๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ •๋‹ต์ด ๋  ์ˆ˜ ์—†๋‹ค.


 

Approach 2 โญ•

  • ์ฃผ์–ด์ง„ ๋ณ„ ์ขŒํ‘œ๋“ค์˜ ๋ชจ๋“  y ์ขŒํ‘œ ํƒ์ƒ‰

๋ณ„๋˜ฅ๋ณ„ ๋‘ ๊ฐœ๋ฅผ ์„ ํƒํ•ด์„œ ํ•˜๋‚˜๋Š” x ์ขŒํ‘œ, ํ•˜๋‚˜๋Š” y ์ขŒํ‘œ๋งŒ ๊ฐ€์ ธ์˜จ๋‹ค. ์™œ ์ด๋ ‡๊ฒŒ ํ‘ธ๋ƒ๋ฉด ์ตœ๋Œ€ํ•œ ๋ณ„๋˜ฅ๋ณ„๋“ค์ด ๋งŽ์ด ๋ชจ์—ฌ์žˆ๋Š” ์œ„์น˜์— ํŠธ๋žจํŽ„๋ฆฐ์„ ๋ฐฐ์น˜ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

. * .
* . *
. * .

 

์œ„์™€ ๊ฐ™์€ ์ƒํ™ฉ์ผ ๋•Œ (1, 2)์˜ x์™€ (2, 1)์˜ y๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉด (1, 1)์— ํŠธ๋žจํŽ„๋ฆฐ์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค. ๊ทธ๋ ‡๊ฒŒํ•ด์•ผ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ๋ณ„๋˜ฅ๋ณ„์„ ํŠ•๊ฒจ๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ์ตœ๋Œ€ํ•œ ๋ณ„๋“ค์„ ํŠธ๋žจํŽ„๋ฆฐ ๋ชจ์„œ๋ฆฌ์— ์œ„์น˜์‹œ์ผœ ๋งŽ์€ ๋ณ„๋˜ฅ๋ณ„์„ ํŠ•๊ฒจ๋‚ด๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 


 

Solution ๐Ÿ’ก

public class BOJ_14658 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());
        int l = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());

        int[][] stars = new int[k][2];
        for (int i = 0; i < k; i++) {
            st = new StringTokenizer(br.readLine());
            stars[i][0] = Integer.parseInt(st.nextToken());
            stars[i][1] = Integer.parseInt(st.nextToken());
        }

        int ret = 0;
        for (int s1 = 0; s1 < k; s1++) {
            int x = stars[s1][0];
            for (int s2 = 0; s2 < k; s2++) {
                int y = stars[s2][1];
                int cnt = 0;
                for (int s = 0; s < k; s++) {
                    if (x <= stars[s][0] && (x + l) >= stars[s][0] && y <= stars[s][1] && (y + l) >= stars[s][1]) cnt++;
                }

                ret = Math.max(ret, cnt);
            }
        }

        System.out.println(k - ret);
    }
}

 

Reference ๐Ÿ“„

https://www.acmicpc.net/board/view/146794

https://www.acmicpc.net/board/view/107552