01
08

โ–ถ ์œ ํ˜•

  • ๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ(Manhattan Distance)๋Š” ๋„์‹œ ๋ธ”๋ก์„ ๋”ฐ๋ผ ์ด๋™ํ•˜๋Š” ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ์ˆ˜ํ•™์—์„œ์˜ ๊ฑฐ๋ฆฌ ๊ณต์‹์ด๋ž‘์€ ๋‹ค๋ฅธ๋ฐ, |x1 - x2| + |y1 - y2| ๋กœ ๋‘ ์  ์‚ฌ์ด์˜ x์ขŒํ‘œ ์ฐจ์ด์˜ ์ ˆ๋Œ“๊ฐ’๊ณผ y์ขŒํ‘œ ์ฐจ์ด์˜ ์ ˆ๋Œ“๊ฐ’์˜ ํ•ฉ์„ ๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • ์ฆ‰ ๊ฒฉ์žํ˜• ๊ตฌ์กฐ์—์„œ์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋ฉด ๋˜๋Š” ๊ฑฐ๋‹ˆ๊นŒ ์ขŒํ‘œํ‰๋ฉด์ด๋‚˜ ๋Œ€๊ฐ์„ ์„ ๊ณ ๋ คํ•˜์ง€์•Š๋Š” ์ƒํ™ฉ์—์„œ ์œ ์šฉํ•œ ์ˆ˜์‹์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
  • ๊ทผ๋ฐ ์ด๊ฑธ ์—ฌ๋Ÿฌ ์ ๋“ค ์‚ฌ์ด์—์„œ ๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ ์ตœ์†Œ ํ•ฉ์„ ๊ตฌํ•˜๋ ค๋ฉด ์ค‘์•™๊ฐ’์„ ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค.

โ–ถ ์ „๋žต

1์ฐจ์›, 2์ฐจ์›์œผ๋กœ ๋‚˜๋ˆ ์„œ ๋ณด๊ฒ ๋‹ค.

 

1์ฐจ์›์—์„œ ์—ฌ๋Ÿฌ ์ ๋“ค๋กœ๋ถ€ํ„ฐ์˜ ๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ ํ•ฉ์ด ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ์ง€์ ์ด ์ค‘์•™๊ฐ’์ธ ์ด์œ ๋ฅผ ์•Œ์•„๋ณด์ž.

์ˆ˜ํ‰์„ ์— n๊ฐœ์˜ ์  xโ‚, xโ‚‚, ..., xโ‚™์ด ์žˆ์„ ๋•Œ, ๊ฑฐ๋ฆฌ ํ•ฉ์„ ์ƒ๊ฐํ•ด๋ณธ๋‹ค๋ฉด 

  • p๊ฐ€ ์–ด๋–ค ์  xแตข๋ณด๋‹ค ์ž‘์œผ๋ฉด: -1 ๊ธฐ์—ฌ
  • p๊ฐ€ ์–ด๋–ค ์  xแตข๋ณด๋‹ค ํฌ๋ฉด: +1 ๊ธฐ์—ฌ

๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฒฐ๊ตญ ์ตœ์ ๊ฐ’์„ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ธฐ์ค€ ์ ์„ ์ค‘์‹ฌ์œผ๋กœ ์ž‘์€ ์ ๋“ค์˜ ๊ฐœ์ˆ˜, ํฐ ์ ๋“ค์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ™์€ ์ง€์ ์— ๋†”์•ผํ•˜๋Š”๋ฐ, ์ด ๋ง์€ ๊ณง ์ค‘์•™๊ฐ’์ด๋ผ๋Š” ์–˜๊ธฐ๊ฐ€๋œ๋‹ค.

 

๋‹ค์‹œ ๋งํ•˜์ž๋ฉด, ์ˆ˜ํ‰์„ ์—์„œ

์ค‘์•™๊ฐ’์—์„œ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•  ๊ฒฝ์šฐ ์™ผ์ชฝ ์ ๋“ค๊ณผ์˜ ๊ฑฐ๋ฆฌ๋Š” ์ค„์ง€๋งŒ, ์˜ค๋ฅธ์ชฝ ์ ๋“ค๊ณผ์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ๋” ๋งŽ์ด ์ฆ๊ฐ€ํ•˜๊ณ 
์ค‘์•™๊ฐ’์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™: ์˜ค๋ฅธ์ชฝ ์ ๋“ค๊ณผ์˜ ๊ฑฐ๋ฆฌ๋Š” ์ค„์ง€๋งŒ, ์™ผ์ชฝ ์ ๋“ค๊ณผ์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ๋” ๋งŽ์ด ์ฆ๊ฐ€ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ์ค‘์•™๊ฐ’์ด ์ด ๋•Œ ์ตœ์ ์ ์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค!

 

๊ทธ๋Ÿผ 2์ฐจ์›์œผ๋กœ ๊ฐ€๋ณด์ž

2์ฐจ์›์€ ์ˆ˜ํ‰์„ ์ด ๋‹จ์ˆœํžˆ 2๊ฐœ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ๊ณง x์ถ•๊ณผ y์ถ•์ด ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•˜๊ณ , ๊ฐ๊ฐ์˜ ์ถ•์„ ๊ธฐ์ค€์œผ๋กœ 1์ฐจ์› ๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ ์ตœ์ ์  ์ฐพ๋“ฏ ํ•˜๋ฉด ๋œ๋‹ค.

 

์ฆ‰ x์ขŒํ‘œ์˜ ์ค‘์•™๊ฐ’๊ณผ y์ขŒํ‘œ์˜ ์ค‘์•™๊ฐ’์ด ๋งŒ๋‚˜๋Š” ์ ์ด ์ „์ฒด ์ตœ์ ํ•ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

๋ฐ”๋กœ ๋ฌธ์ œ ํ’€์–ด๋ณด์ž.

 

https://www.acmicpc.net/problem/18310

1์ฐจ์› ๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ ํ•ฉ ์ตœ์ ์ ์„ ์ฐพ๋Š” ๋ฌธ์ œ๋‹ค.

 

๋‚œ ์ฒ˜์Œ์— ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ–ˆ๋‹ค๊ฐ€ ๋ฐ”๋กœ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค.

public static void go() {
    int[] target = new int[n];
    for (int i = 0; i < n; i++) {
        target[i] = point[i];
    }
    Arrays.sort(target);
    int min = Integer.MAX_VALUE;
    int minT = Integer.MAX_VALUE;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            int center = (target[j] + point[i]) / 2;
            int dist = 0;
            for (int k = 0; k < n; k++) {
                int d = Math.abs(point[k] - center);
                dist += d;
            }
            if (min > dist) {
                min = dist;
                minT = center;
            }
            // System.out.println("dist: " + dist + " minT: " + minT + " center: " + center);
            // System.out.println();
        }
    }
}

์ง„์งœ ์™„์ „ํƒ์ƒ‰ ๋ฐฉ์‹์œผ๋กœ ํ‘ผ๊ฑด๋ฐ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ณด๋‹ค์‹œํ”ผ O(n^3)์ด๋‹ค.

n์ด 20๋งŒ์ด๋ผ ์ ˆ๋Œ€ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

 

์ˆ˜ํ‰์„  ์ตœ์ ์ ์„ ์ƒ๊ฐํ•˜๋ฉฐ ๋‹ค์‹œ ํ’€๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์งง์€ ํ’€์ด๊ฐ€ ์™„์„ฑ๋œ๋‹ค.

public static void go() {
    Arrays.sort(point);
    System.out.println(point[(n - 1) / 2]);
}

 

์ด๊ฑธ 2์ฐจ์›์œผ๋กœ ๋“ค๊ณ  ๊ฐ€๋ฉด ์•„๋ž˜ ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค.

https://www.acmicpc.net/problem/1090

์ฒ˜์Œ์— ์ค‘์•™๊ฐ’์ด ํ•ญ์ƒ ์ตœ์ ์ธ ์ด์œ ๋ฅผ ๋ชจ๋ฅด๊ณ , ์ฃผ์–ด์ง„ ์ ์„ ํ™œ์šฉํ•ด์„œ ๊ฑฐ๋ฆฌํ•ฉ์„ ๊ตฌํ–ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด ์ฒซ๋ฒˆ์งธ ์˜ˆ์‹œ์—์„œ 0 2 4 6์ด ๋‚˜์˜ค๋ฉฐ ํ‹€๋ฆฐ ๋‹ต๋งŒ ๋‚ด๋†“๋Š”๋‹ค.

 

๊ทธ๋ž˜์„œ x ์ถ•, y ์ถ•์„ ๋ถ„๋ฆฌํ•ด ๊ฐ ์ขŒํ‘œ๋ฅผ ๋–ผ์–ด๋‚ด์–ด ์กฐํ•ฉํ•ด์•ผ๋œ๋‹ค.

์ฒ˜์Œ ์ž‘์„ฑํ•  ๋•Œ ์ค‘์•™๊ฐ’ ๋น„๊ต๋ฅผ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ•ด์„œ ๊ณ„์† ํ‹€๋ ธ๋‹ค.

public static void go() {
    for (int k = 1; k <= n; k++) {
        // k์ผ๋•Œ ์ตœ์†Œ๊ฑฐ๋ฆฌํ•ฉ
        int res = Integer.MAX_VALUE;

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                int centerX = checker[i][0]; // ์› ๋Œ€์ƒ์˜ X
                int centerY = checker[j][1]; // ๋น„๊ต ๋Œ€์ƒ์˜ Y

                int[] dist = new int[n];
                for (int p = 0; p < n; p++) {
                    dist[p] = Math.abs(checker[p][0] - centerX) + Math.abs(checker[p][1] - centerY);
                }
//                    System.out.println(Arrays.toString(dist));
                Arrays.sort(dist);

                int sum = 0;
                for (int d = 0; d < k; d++) {
                    sum += dist[d];
                }

                res = Math.min(res, sum);
            }
        }
        sb.append(res).append(" ");
    }
}

์›๋Œ€์ƒ์˜ X์ขŒํ‘œ, ๋น„๊ต ๋Œ€์ƒ์˜ Y์ขŒํ‘œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ด์„œ ๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋ฉฐ k ๋งŒํผ์˜ ํ•ฉ์„ ๊ณ„์† ๋งŒ๋“ค์–ด๊ฐ€๋ฉด ๋˜๋Š” ๋ฌธ์ œ๋‹ค. ๋‚˜๋Š” ๋‚œ์ด๋„๋ฅผ ๋ชจ๋‘ ๊ฐ€๋ฆฌ๊ณ  ํ’€๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒŒ ํ”Œ๋ ˆ๋ผ๋Š” ๊ฑธ ์•Œ๊ณ  ์ข€ ๋†€๋ž๋‹ค.

 

๋„์›€์ด ๋๋‹ค๋ฉด ๋Œ“๊ธ€์ด๋‚˜ ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์„ธ์š”!

 

๋ฐ˜์‘ํ˜•
COMMENT