๐Ÿ“– [๋ฐฑ์ค€์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด] Q.1992 ์ฟผ๋“œํŠธ๋ฆฌ ๋ฌธ์ œ ํ’€์ด - java

๐Ÿ“– ๋ฌธ์ œ

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

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

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

๊ทธ๋ฆผ 1

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

๐Ÿ” ์ ‘๊ทผ๋ฒ•

Q.1992 ์ฟผ๋“œํŠธ๋ฆฌ ๋ฌธ์ œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

Q.2630 ์ƒ‰์ข…์ด ๋งŒ๋“ค๊ธฐ ๋ฌธ์ œ์™€ ์ƒ๋‹นํžˆ ์œ ์‚ฌํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์ฟผ๋“œํŠธ๋ฆฌ ๋ฌธ์ œ ์—ญ์‹œ ์ฃผ์–ด์ง€๋Š” ์˜์ƒ์ด ๋ชจ๋‘ 0์ด๊ฑฐ๋‚˜ 1์ด์—ฌ๋งŒ ์••์ถ•์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ƒ‰์ข…์ด ๋งŒ๋“ค๊ธฐ ๋ฌธ์ œ์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ฃผ์–ด์ง„ ์˜์ƒ์ด ๋ชจ๋‘ 0์ด๊ฑฐ๋‚˜ 1์ด ์•„๋‹ˆ๋ผ๋ฉด

๊ฐ€๋กœ, ์„ธ๋กœ๋ฅผ ๋ชจ๋‘ ๊ฐ€๋กœ๋กœ ๋‚˜๋ˆ  4๋“ฑ๋ถ„์„ ๋ฐ˜๋ณตํ•ด์ค๋‹ˆ๋‹ค.

๋ถ„ํ•  ์ •๋ณต๋ฒ•์„ ์ด์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ’€์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒ‰์ข…์ด ๋งŒ๋“ค๊ธฐ์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ฃผ์–ด์ง„ ์˜์ƒ์ด ๋ชจ๋‘ 0์ด๊ฑฐ๋‚˜ 1์ผ๋•Œ ๊นŒ์ง€

์žฌ๊ท€๋ฅผ ํ†ตํ•ด 4๋“ฑ๋ถ„์œผ๋กœ ๋‚˜๋ˆ„๋‹ค๊ฐ€ ์กฐ๊ฑด์— ๋งž๋Š”๋‹ค๋ฉด ์••์ถ•์„ ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์••์ถ•์˜ ํ‘œํ˜„์„ ๋ฌธ์ž์—ด๋กœ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—

StringBuilder ๋ฅผ ์ด์šฉํ•˜์—ฌ

์žฌ๊ท€์— ๋“ค์–ด๊ฐˆ ๋•Œ โ€œ(โ€œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๊ณ 

์žฌ๊ท€๊ฐ€ ๋๋‚˜๊ณ  ์••์ถ•์ด ์™„๋ฃŒ๊ฐ€ ๋  ๋•Œ๋งˆ๋‹ค โ€œ)โ€๋ฅผ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.

๋˜ํ•œ ๋‚˜๋ˆ ์ง„ ๋ถ€๋ถ„ ์˜์ƒ์ด 0 ์ด๊ฑฐ๋‚˜ 1์ด๋ผ๋ฉด ํ•ด๋‹น ์ˆซ์ž๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ

์••์ถ•์˜ ํ‘œํ˜„์„ ๋ฌธ์ž์—ด๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ป ์ฝ”๋“œ


package problem.divide_conquer;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main_1992 {
    static int n;
    static int board[][];
    static StringBuilder sb;

    public static void main(String[] args) throws IOException {
        input();
        solve(0, 0, n);
        System.out.println(sb.toString());
    }

    public static void input() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        sb = new StringBuilder();
        n = Integer.parseInt(br.readLine());
        board = new int[n][n];
        for (int i = 0; i < n; i++) {
            String[] input = br.readLine().split("");
            for (int j = 0; j < n; j++) {
                board[i][j] = Integer.parseInt(input[j]);
            }
        }

        br.close();
    }

    public static void solve(int startX, int startY, int len) {
        if (check(startX, startY, len)) {
            if (board[startY][startX] == 1) {
                sb.append("1");
            } else {
                sb.append("0");
            }
        } else {
            int length = len / 2;
            sb.append("(");
            solve(startX, startY, length);
            solve(startX + length, startY, length);
            solve(startX, startY + length, length);
            solve(startX + length, startY + length, length);
            sb.append(")");
        }
    }

    public static boolean check(int startX, int startY, int len) {
        int color = board[startY][startX];
        for (int i = startY; i < startY + len; i++) {
            for (int j = startX; j < startX + len; j++) {
                if (color != board[i][j]) {
                    return false;
                }
            }
        }
        return true;
    }
}

Written on March 16, 2021