๊ธฐ๋ก๋ฐฉ

BOJ_1992 : ์ฟผ๋“œํŠธ๋ฆฌ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_1992 : ์ฟผ๋“œํŠธ๋ฆฌ

Soom_1n 2023. 2. 10. 08:56

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

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

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

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • n x n ํฌ๊ธฐ์˜ ์˜์ƒ ์ •๋ณด์—์„œ 0 ๋˜๋Š” 1๋กœ ์••์ถ•๋œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • ์ •์‚ฌ๊ฐํ˜•์ด ํ•˜๋‚˜์˜ ์ˆ˜๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉด ๊ทธ ์ˆ˜๋กœ ์••์ถ•๊ฐ€๋Šฅํ•˜๋‹ค.
    • ํ•ด๋‹น ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • ๋‹ค๋ฅธ ์ˆ˜๊ฐ€ ์„ž์—ฌ์žˆ์œผ๋ฉด, ์ •์‚ฌ๊ฐํ˜•์„ 4๋“ฑ๋ถ„ํ•ด์„œ ๋‹ค์‹œ ์••์ถ•ํ•œ๋‹ค.
    • 4๋“ฑ๋ถ„ ํ–ˆ์„๋•Œ ๊ฒฐ๊ณผ๊ฐ’์€ () ๊ด„ํ˜ธ๋กœ ๋ฌถ์–ด ์ถœ๋ ฅํ•œ๋‹ค.
  • ์žฌ๊ท€๋ฅผ ์ด์šฉํ•ด์„œ ์ •์‚ฌ๊ฐํ˜•์ด ํ•˜๋‚˜์˜ ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ์ง€ ์•Š์œผ๋ฉด 4๋“ฑ๋ถ„ ๊ฐ’์„ ๋‹ค์‹œ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•œ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

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

public class Main {
    static int[][] arr;
    static StringBuilder sb;
    
    private static void recursion(int n, int x, int y) {
        if (check(n, x, y)) {
            sb.append(arr[x][y]);
        } else {
            sb.append("(");
            recursion(n / 2, x, y);
            recursion(n / 2, x, y + n / 2);
            recursion(n / 2, x + n / 2, y);
            recursion(n / 2, x + n / 2, y + n / 2);
            sb.append(")");
        }
    }

    private static boolean check(int n, int x, int y) {
        int num = arr[x][y];
        for (int i = x; i < x + n; i++) {
            for (int j = y; j < y + n; j++) {
                if (arr[i][j] != num) return false;
            }
        }
        return true;
    }

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

        for (int i = 0; i < n; i++) {
            String temp = br.readLine();
            for (int j = 0; j < n; j++) {
                arr[i][j] = temp.charAt(j) - '0';
            }
        }
        sb = new StringBuilder();
        recursion(n, 0, 0);
        System.out.println(sb.toString());
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • main ๋ฉ”์„œ๋“œ์—์„œ ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›๊ณ  recursion ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • check ๋ฉ”์„œ๋“œ๋Š” ์ •์‚ฌ๊ฐํ˜•์ด ๊ฐ™์€ ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  • recursion ๋ฉ”์„œ๋“œ๋Š” ์ •์‚ฌ๊ฐํ˜•์˜ ํ•œ ๋ณ€์˜ ๊ธธ์ด n, ์ขŒ์ƒ๋‹จ์˜ ์ขŒํ‘œ x,y ๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
    • ํ•ด๋‹น ๋ฒ”์œ„์˜ ์ •์‚ฌ๊ฐํ˜•์ด ๊ฐ™์€ ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ์œผ๋ฉด ๊ทธ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
    • ๋‹ค๋ฅธ ์ˆ˜๊ฐ€ ์„ž์—ฌ์žˆ์œผ๋ฉด 4๋“ฑ๋ถ„ํ•ด์„œ ๋‹ค์‹œ recursion ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

 


๐Ÿ”ธ end ๐Ÿ”ธ

  • ์žฌ๊ท€๋ฅผ ์ด์šฉํ•œ ๋ถ„ํ• ์ •๋ณต ๋ฌธ์ œ๊ฐ€ ์˜ฌ๋ฆผํ”ฝ ๊ฒŒ์ž„ ํ›„๋กœ ์—ฐ์†์œผ๋กœ ํ’€์–ด๋ดค๋Š”๋ฐ, ์žฌ๊ท€ ์—ฐ์Šต์— ์ข‹์€ ๊ฒƒ ๊ฐ™๋‹ค.
  • ๋ฌธ์ œ ๋ถ„์„๊ณผ ํ’€์ด ๊ณ„ํš์„ ์ ์–ด๊ฐ€๋ฉฐ ํ’€์ดํ–ˆ๋‹ค.

728x90