[Boj_1992] ์ฟผ๋“œํŠธ๋ฆฌ

๐Ÿ“Ž ๋ฌธ์ œ ๋งํฌ

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

 

1992๋ฒˆ: ์ฟผ๋“œํŠธ๋ฆฌ

์ฒซ์งธ ์ค„์—๋Š” ์˜์ƒ์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž N ์ด ์ฃผ์–ด์ง„๋‹ค. N ์€ ์–ธ์ œ๋‚˜ 2์˜ ์ œ๊ณฑ์ˆ˜๋กœ ์ฃผ์–ด์ง€๋ฉฐ, 1 ≤ N ≤ 64์˜ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง„๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ๋Š” ๊ธธ์ด N์˜ ๋ฌธ์ž์—ด์ด N๊ฐœ ๋“ค์–ด์˜จ๋‹ค. ๊ฐ ๋ฌธ์ž์—ด์€ 0 ๋˜

www.acmicpc.net

 

โ–ธ ๋ฌธ์ œ

ํ‘๋ฐฑ ์˜์ƒ์„ ์••์ถ•ํ•˜์—ฌ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ ์ฟผ๋“œ ํŠธ๋ฆฌ(Quad Tree)๋ผ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ํฐ ์ ์„ ๋‚˜ํƒ€๋‚ด๋Š” 0๊ณผ ๊ฒ€์€ ์ ์„ ๋‚˜ํƒ€๋‚ด๋Š” 1๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ์˜์ƒ(2์ฐจ์› ๋ฐฐ์—ด)์—์„œ ๊ฐ™์€ ์ˆซ์ž์˜ ์ ๋“ค์ด ํ•œ ๊ณณ์— ๋งŽ์ด ๋ชฐ๋ ค์žˆ์œผ๋ฉด, ์ฟผ๋“œ ํŠธ๋ฆฌ์—์„œ๋Š” ์ด๋ฅผ ์••์ถ•ํ•˜์—ฌ ๊ฐ„๋‹จํžˆ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฃผ์–ด์ง„ ์˜์ƒ์ด ๋ชจ๋‘ 0์œผ๋กœ๋งŒ ๋˜์–ด ์žˆ์œผ๋ฉด ์••์ถ• ๊ฒฐ๊ณผ๋Š” "0"์ด ๋˜๊ณ , ๋ชจ๋‘ 1๋กœ๋งŒ ๋˜์–ด ์žˆ์œผ๋ฉด ์••์ถ• ๊ฒฐ๊ณผ๋Š” "1"์ด ๋œ๋‹ค. ๋งŒ์•ฝ 0๊ณผ 1์ด ์„ž์—ฌ ์žˆ์œผ๋ฉด ์ „์ฒด๋ฅผ ํ•œ ๋ฒˆ์— ๋‚˜ํƒ€๋‚ด์ง€๋ฅผ ๋ชปํ•˜๊ณ , ์™ผ์ชฝ ์œ„, ์˜ค๋ฅธ์ชฝ ์œ„, ์™ผ์ชฝ ์•„๋ž˜, ์˜ค๋ฅธ์ชฝ ์•„๋ž˜, ์ด๋ ‡๊ฒŒ 4๊ฐœ์˜ ์˜์ƒ์œผ๋กœ ๋‚˜๋ˆ„์–ด ์••์ถ•ํ•˜๊ฒŒ ๋˜๋ฉฐ, ์ด 4๊ฐœ์˜ ์˜์—ญ์„ ์••์ถ•ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ๊ด„ํ˜ธ ์•ˆ์— ๋ฌถ์–ด์„œ ํ‘œํ˜„ํ•œ๋‹ค

 

์œ„ ๊ทธ๋ฆผ์—์„œ ์™ผ์ชฝ์˜ ์˜์ƒ์€ ์˜ค๋ฅธ์ชฝ์˜ ๋ฐฐ์—ด๊ณผ ๊ฐ™์ด ์ˆซ์ž๋กœ ์ฃผ์–ด์ง€๋ฉฐ, ์ด ์˜์ƒ์„ ์ฟผ๋“œ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ์••์ถ•ํ•˜๋ฉด "(0(0011)(0(0111)01)1)"๋กœ ํ‘œํ˜„๋œ๋‹ค. N ×N ํฌ๊ธฐ์˜ ์˜์ƒ์ด ์ฃผ์–ด์งˆ ๋•Œ, ์ด ์˜์ƒ์„ ์••์ถ•ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

โ–ธ ์ž…๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ์˜์ƒ์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž N ์ด ์ฃผ์–ด์ง„๋‹ค. N ์€ ์–ธ์ œ๋‚˜ 2์˜ ์ œ๊ณฑ์ˆ˜๋กœ ์ฃผ์–ด์ง€๋ฉฐ, 1 ≤ N ≤ 64์˜ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง„๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ๋Š” ๊ธธ์ด N์˜ ๋ฌธ์ž์—ด์ด N๊ฐœ ๋“ค์–ด์˜จ๋‹ค. ๊ฐ ๋ฌธ์ž์—ด์€ 0 ๋˜๋Š” 1์˜ ์ˆซ์ž๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ์˜์ƒ์˜ ๊ฐ ์ ๋“ค์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

โ–ธ ์ถœ๋ ฅ

์˜์ƒ์„ ์••์ถ•ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

๐Ÿ“ ๋ฌธ์ œ ์ •๋ณด

  • ๐Ÿฅˆ ๋ฌธ์ œ ๋ ˆ๋ฒจ : ์‹ค๋ฒ„ 1
  • ๐Ÿ””  ๋ฌธ์ œ ์œ ํ˜• : ๋ถ„ํ•  ์ •๋ณต, ์žฌ๊ท€
  • ๐Ÿ’ฌ  ํ’€์ด ์–ธ์–ด : JAVA

 

๐Ÿค” ๋ฌธ์ œ ํ’€์ด

  • ์•ž์„œ ํฌ์ŠคํŒ…ํ–ˆ๋˜ ์ƒ‰์ข…์ด ๋งŒ๋“ค๊ธฐ์™€ ์œ ์‚ฌํ–ˆ๋˜ ๋ฌธ์ œ๋‹ค.
  • ๋จผ์ € ์‹œ์ž‘์ ์„ ๊ธฐ์ค€์œผ๋กœ ์ „์ฒด ํฌ๊ธฐ์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ์ ์œผ๋กœ ์••์ถ•์ด ๊ฐ€๋Šฅํ•œ์ง€ ์ฒดํฌํ–ˆ๋‹ค.
  • ์••์ถ•์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด, ํ•˜๋‚˜์˜ ์ ์œผ๋กœ ์••์ถ•ํ•ด ์ฃผ์—ˆ๋‹ค.
  • ์••์ถ•์ด ๊ฐ€๋Šฅํ•˜์ง€ ์•Š๋‹ค๋ฉด, ์••์ถ•์ด ๊ฐ€๋Šฅํ•ด์งˆ ๋•Œ๊นŒ์ง€ 4๋“ฑ๋ถ„(์™ผ์ชฝ ์œ„, ์˜ค๋ฅธ์ชฝ ์œ„, ์™ผ์ชฝ ์•„๋ž˜, ์˜ค๋ฅธ์ชฝ ์•„๋ž˜)์œผ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ๊ฐ ๋ถ€๋ถ„ ๋ฌธ์ œ๋กœ ์ชผ๊ฐœ์–ด ํ•ด๊ฒฐํ–ˆ๋‹ค.
    • ์ด๋•Œ, ๊ฐ ๊นŠ์ด์— ๋Œ€ํ•ด ์—ฌ๋Š” ๊ด„ํ˜ธ๋กœ ์‹œ์ž‘ํ•ด ์ฃผ๊ณ  ํ•ด๋‹น ๊นŠ์ด๊ฐ€ ๋๋‚ฌ๋‹ค๋ฉด ๋‹ซ๋Š” ๊ด„ํ˜ธ๋กœ ๋‹ซ์•„์ฃผ์—ˆ๋‹ค.

 

โœ” ์ตœ์ข… ์ฝ”๋“œ

๋ฉ”๋ชจ๋ฆฌ : 11668KB
์‹œ๊ฐ„ : 80ms
import java.io.*;

public class Main {
    static int n;
    static int[][] map;
    static StringBuilder sb = new StringBuilder();
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        n = Integer.parseInt(br.readLine()); // ์˜์ƒ์˜ ํฌ๊ธฐ
        map = new int[n][n]; // ์˜์ƒ
        for (int i = 0; i < n; i++) {
            String str = br.readLine();
            for (int j = 0; j < n; j++) {
                map[i][j] = str.charAt(j)-'0';
            }
        }

        partition(0, 0, n); // ์‹œ์ž‘์ , ํ•œ ๋ณ€์˜ ๊ธธ์ด
        System.out.println(sb.toString());
    }

    private static void partition(int x, int y, int size) {
        if (colorCheck(x, y, size)) { // ์••์ถ•์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด
            sb.append(map[x][y]); // ํ•˜๋‚˜์˜ ์ ์œผ๋กœ ์••์ถ•
            return;
        }

        // ์••์ถ•์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์ ˆ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋ถ„ํ• 
        int newSize = size/2;
        sb.append("("); // ๊ฐ ๊นŠ์ด์—์„œ ์—ฌ๋Š” ๊ด„ํ˜ธ ์‹œ์ž‘
        partition(x, y, newSize); // ์™ผ์ชฝ ์œ„
        partition(x, y+newSize, newSize); // ์˜ค๋ฅธ์ชฝ ์œ„
        partition(x+newSize, y, newSize); // ์™ผ์ชฝ ์•„๋ž˜
        partition(x+newSize, y+newSize, newSize); // ์˜ค๋ฅธ์ชฝ ์•„๋ž˜
        sb.append(")"); // ํ•ด๋‹น ๊นŠ์ด๊ฐ€ ๋๋‚˜๋ฉด ๋‹ซ๋Š” ๊ด„ํ˜ธ๋กœ ๋‹ซ๊ธฐ
    }

    private static boolean colorCheck(int x, int y, int size) {
        int dot = map[x][y]; // ์ฒซ๋ฒˆ์งธ ์  ๊ธฐ์ค€
        for (int i = x; i < x + size; i++) {
            for (int j = y; j < y + size; j++) {
                // ๊ฐ™์€ ์ ์ด ์•„๋‹ˆ๋ผ๋ฉด false ๋ฆฌํ„ด
                if (map[i][j] != dot) return false;
            }
        }
        return true;
    }
}


 

 

๐Ÿ“ ํ•จ๊ป˜ ํ’€์–ด๋ณด๋ฉด ์ข‹์€ ๋ฐฑ์ค€ ๋ฌธ์ œ

'Algorithm > BOJ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Boj_2447] ๋ณ„ ์ฐ๊ธฐ - 10  (0) 2023.11.28
[Boj_1074] Z  (1) 2023.11.28
[Boj_2630] ์ƒ‰์ข…์ด ๋งŒ๋“ค๊ธฐ  (0) 2023.11.24
[Boj_20002] ์‚ฌ๊ณผ๋‚˜๋ฌด  (0) 2023.11.21
[Boj_1446] ์ง€๋ฆ„๊ธธ  (0) 2023.11.21