๊ธฐ๋ก๋ฐฉ

BOJ_2630 : ์ƒ‰์ข…์ด ๋งŒ๋“ค๊ธฐ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_2630 : ์ƒ‰์ข…์ด ๋งŒ๋“ค๊ธฐ

Soom_1n 2023. 2. 5. 20:57

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

 

2630๋ฒˆ: ์ƒ‰์ข…์ด ๋งŒ๋“ค๊ธฐ

์ฒซ์งธ ์ค„์—๋Š” ์ „์ฒด ์ข…์ด์˜ ํ•œ ๋ณ€์˜ ๊ธธ์ด N์ด ์ฃผ์–ด์ ธ ์žˆ๋‹ค. N์€ 2, 4, 8, 16, 32, 64, 128 ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์ƒ‰์ข…์ด์˜ ๊ฐ ๊ฐ€๋กœ์ค„์˜ ์ •์‚ฌ๊ฐํ˜•์นธ๋“ค์˜ ์ƒ‰์ด ์œ—์ค„๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ์ค„๊นŒ์ง€ ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net



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

  • N x N ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜• ์ข…์ด๋ฅผ ๊ฐ™์€ ์ƒ‰์œผ๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ์ •์‚ฌ๊ฐํ˜•์œผ๋กœ ์ž๋ฅผ ๋•Œ ์ตœ์†Œ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
    • ์ข…์ด๋ฅผ ์ž๋ฅด๋Š” ๋ฐฉ๋ฒ•์€ ํ•œ ๋ณ€์˜ ๊ธธ์ด๋ฅผ ์ ˆ ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์ •์‚ฌ๊ฐํ˜• 4๊ฐœ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.
  • ํ•œ ์ •์‚ฌ๊ฐํ˜• ๋ฒ”์œ„๊ฐ€ ๋ชจ๋‘ ๊ฐ™์€ ์ƒ‰์ธ์ง€ ์ฒดํฌํ•˜๊ณ , ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด 4๋“ฑ๋ถ„์œผ๋กœ ์ž˜๋ผ ๋‹ค์‹œ ์ƒ‰์„ ์ฒดํฌํ•˜๋Š” ์žฌ๊ท€ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • ์žฌ๊ท€ ๋ฉ”์„œ๋“œ์˜ ์ž…๋ ฅ ๊ฐ’์€ ํ•œ ๋ณ€์˜ ๊ธธ์ด์™€ ์ขŒ์ƒ๋‹จ์˜ ์ขŒํ‘œ์ด๋‹ค.

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

import java.util.Scanner;

public class Main {
    private static int[][] arr;
    private static int white, blue;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        arr = new int[n][n];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                arr[i][j] = sc.nextInt();
            }
        }
        cutting(n, 0, 0);
        System.out.println(white);
        System.out.println(blue);
    }

    private static int cutting(int n, int x, int y) {
//        print(n, x, y);
        int pick = arr[x][y];
        if (n > 1) {
            for (int i = x; i < x + n; i++) {
                for (int j = y; j < y + n; j++) {
                    if (arr[i][j] != pick) {
                        cutting(n / 2, x, y);
                        cutting(n / 2, x + n / 2, y);
                        cutting(n / 2, x, y + n / 2);
                        cutting(n / 2, x + n / 2, y + n / 2);
                        return 0;
                    }
                }
            }
        }
        if (pick == 0) white++;
        else blue++;
        return 0;
    }

    private static void print(int n, int x, int y) {
        System.out.println("\n==================(" + x +", "+ y +")========================");
        for (int i = x; i < x + n; i++) {
            for (int j = y; j < y + n; j++) {
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }
    }
}

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

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

๐Ÿ”ธ end ๐Ÿ”ธ

  • ๋ถ„ํ•  ์ •๋ณต ๋ฌธ์ œ๋ผ๋Š”๋ฐ ์ต์ˆ™์น˜ ์•Š์€ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์ด์—ˆ์ง€๋งŒ, ๋งŽ์ด ์–ด๋ ต์ง€๋Š” ์•Š์•˜๋‹ค.
  • ์žฌ๊ท€ ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ์ด ์ƒ๊ฐ๋ณด๋‹ค ์—ฐ์Šต์ด ๋œ ๋œ ๊ฒƒ ๊ฐ™์•„์„œ ์žฌ๊ท€ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณผ๊นŒ ํ•œ๋‹ค.
  • ๋ฌธ์ œ ์ ‘๊ทผ, ํ’€์ด๊ณ„ํš ๋ฉ”๋ชจ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.

728x90