2 ๋ถ„ ์†Œ์š”

๐Ÿ“ [G4_14502] ์—ฐ๊ตฌ์†Œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class BOJ_G4_14502 {

    public static class Dot {
        private int x;
        private int y;

        public Dot(int y, int x) {
            this.x = x;
            this.y = y;
        }
    }

    static int N, M;
    // 4๋ฐฉํ–ฅ ํƒ์ƒ‰
    static int[] dx = {1, 0, -1, 0};
    static int[] dy = {0, 1, 0, -1};
    // map
    static int[][] map;
    static int[][] mapCopy;
    // ์ตœ๋Œ€๊ฐ’
    static int maxValue = 0;
    // ๋นˆ ๊ณต๊ฐ„ List -> ๋ฒฝ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„
    static List<Dot> list = new ArrayList<>();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        // ๊ฐ€๋กœ ์„ธ๋กœ ํฌ๊ธฐ ์ž…๋ ฅ ๋ฐ›๊ธฐ
        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());

        map = new int[N][M];
        mapCopy = new int[N][M];

        // map ์ž…๋ ฅ
        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            for (int j = 0; j < M; j++) {
                map[i][j] = Integer.parseInt(st.nextToken());
                // ๋นˆ๊ณต๊ฐ„์ด๋ฉด List์— ๋„ฃ์–ด์ฃผ๊ธฐ
                if (map[i][j] == 0) {
                    list.add(new Dot(i, j));
                }
            }
        }

        inputWall(0,0);
        System.out.println(maxValue);

    }

    // ๋ฒฝ ์ž…๋ ฅํ•˜๊ธฐ xC3
    // mapCopy[][] ์— ๋ฒฝ ์ž…๋ ฅ
    static void inputWall(int idx, int cnt) {
        // 3๊ฐœ ๋ฒฝ ๋‹ค ๋„ฃ์—ˆ์„ ๊ฒฝ์šฐ ๋ฐ”์ด๋Ÿฌ์Šค ํผ๋œจ๋ฆฌ๊ธฐ
        // ์ตœ๋Œ“๊ฐ’ ๊ณ„์‚ฐ
        if (idx == 3) {
            // ๋ฒฝ ๋„ฃ์€ map์„ mapCopy๋กœ ๋ณต์‚ฌ
            copy();

            // ๋ฐ”์ด๋Ÿฌ์Šค ํผ๋œจ๋ฆฌ๊ธฐ
            for (int i = 0; i < N; i++) {
                for (int j = 0; j < M; j++) {
                    if(mapCopy[i][j] == 2) {
                        dfs(i, j);
                    }
                }
            }

            // ์•ˆ์ „์˜์—ญ ํฌ๊ธฐ ๊ตฌํ•˜๊ธฐ
            int size = size();
            // ์ตœ๋Œ“๊ฐ’ ๊ฐฑ์‹ 
            maxValue = Math.max(maxValue, size);

            // map ์ดˆ๊ธฐํ™”
            copy();
            return;
        }

        // ๋ฒฝ ๋†“๊ธฐ
        for(int i=cnt; i<list.size();i++){
            // ๋ฒฝ์„ ๋†“์„ ์ˆ˜ ์žˆ๋Š” x,y ์ขŒํ‘œ
            int x = list.get(i).x;
            int y = list.get(i).y;
            // ๋ฒฝ ๋†“๊ธฐ
            map[y][x] = 1;

            inputWall(idx+1, i+1);

            // ๋ฒฝ ๋นผ๊ธฐ
            map[y][x] = 0;
        }
    }


    // 4๋ฐฉํ–ฅ ํƒ์ƒ‰์„ ํ†ตํ•ด ๋ฐ”์ด๋Ÿฌ์Šค ํผ๋œจ๋ฆฌ๊ธฐ
    // 1์ด๊ฑฐ๋‚˜ 2์ด๋ฉด ๋ชป๊ฐ€๊ฒŒ -> ์–ด์ฐจํ”ผ ์™„ํƒ์ด๋ผ ์ƒ๊ด€ x
    static void dfs(int y, int x) {
        // 4๋ฐฉํ–ฅ ํƒ์ƒ‰
        int nx,ny;
        for(int i=0; i<4; i++){
            nx = x + dx[i];
            ny = y + dy[i];

            // ๋งŒ์•ฝ ๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ•œ ๊ฒฝ์šฐ ํ†ต๊ณผ
            if(nx < 0 || ny < 0 || nx >= M || ny >= N) continue;

            // ๋งŒ์•ฝ ๋ฒฝ์ด๊ฑฐ๋‚˜ ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ์ด๋ฏธ ์žˆ๋Š” ๊ณณ์ด๋ฉด ํ†ต๊ณผ
            if(mapCopy[ny][nx] == 1 || mapCopy[ny][nx] == 2) continue;

            // ๋ฐ”์ด๋Ÿฌ์Šค ํผ๋œจ๋ฆฌ๊ธฐ
            mapCopy[ny][nx] = 2;
            dfs(ny,nx);
        }

    }

    // ์•ˆ์ „์˜์—ญ ํฌ๊ธฐ ๊ตฌํ•˜๊ธฐ
    static int size() {
        int size = 0;
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < M; j++) {
                if (mapCopy[i][j] == 0) size++;
            }
        }
        return size;
    }

    // ๋ฐฐ์—ด ๋ณต์‚ฌ
    // ๋ฒฝ์„ 3๊ฐœ ๋งˆ์Œ๋Œ€๋กœ ๋†“๊ณ  ๋ฐ”์ด๋Ÿฌ์Šค ํผ๋œจ๋ฆฌ๊ณ  ์ตœ๋Œ€๊ฐ’ ๊ฐฑ์‹ 
    static void copy() {
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < M; j++) {
                mapCopy[i][j] = map[i][j];
            }
        }
    }
}

๐Ÿค” ๋‚˜์˜ ์ƒ๊ฐ

์˜ค๋žœ๋งŒ์— ํ‘ธ๋Š” ๊ณจ๋“œ ๋ฌธ์ œ์˜€๋‹ค..ใ…‹ใ…‹
์ฒ˜์Œ์— ์ฃผ์„์œผ๋กœ ๋งŒ๋“ค์–ด์•ผํ•˜๋Š” ๋ฉ”์„œ๋“œ๋“ค์„ ๋‹ค ์ •๋ฆฌํ•ด์ฃผ๊ณ  ํ–ˆ๋Š”๋ฐ
๋ฒฝ 3๊ฐœ ์ž…๋ ฅ, dfs๋กœ ๋ฐ”์ด๋Ÿฌ์Šค ํ™•์žฅ, ์•ˆ์ „ ์˜์—ญ ํฌ๊ธฐ ๊ตฌํ•˜๊ธฐ, ๋ฐฐ์—ด ๋ณต์‚ฌ๋ฅผ ์„ค๊ณ„ํ–ˆ๋‹ค.
๋จผ์ € ์•ˆ์ „์˜์—ญ์— ๋ฒฝ์„ 3๊ฐœ ๊ณจ๋ผ ์ž…๋ ฅํ•˜๋Š” ์ฝ”๋“œ ์•ˆ์— 3๊ฐœ๋ฅผ ๋‹ค ์ž…๋ ฅํ•˜๋ฉด ๊ทธ๋•Œ ๋ฐ”์ด๋Ÿฌ์Šค๋ฅผ ํ™•์žฅ์‹œํ‚จ ํ›„ ์•ˆ์ „ ์˜์—ญ ํฌ๊ธฐ๋ฅผ ๊ตฌํ•ด์ฃผ์—ˆ๋‹ค.
๊ทธ ํฌ๊ธฐ๋“ค์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•ด์ฃผ์—ˆ๋Š”๋ฐ ์—ฌ๊ธฐ์„œ ํฌ์ธํŠธ๊ฐ€ ๋ฐ”์ด๋Ÿฌ์Šค๋ฅผ ํ™•์žฅ ์‹œํ‚ฌ ๋•Œ ๊ณ„์† ๊ฐ™์€ map์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ณต๊ตฌํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์›Œ์„œ ๋ฒฝ์„ ์‚ฝ์ž…ํ•˜๋Š” ์ฝ”๋“œ๋Š” ๊ธฐ์กด map์— ํ•ด์ฃผ์ง€๋งŒ ๋ฐ”์ด๋Ÿฌ์Šค๋ฅผ ํ™•์žฅ์‹œํ‚ค๊ธฐ ์ „์—๋Š” map์„ mapCopy์— ๋ณต์‚ฌ๋ฅผ ํ•ด์ฃผ์–ด ๋ฐ”์ด๋Ÿฌ์Šค ํ™•์žฅ ๊ณผ์ •์€ mapCopy์—์„œ ์ง„ํ–‰ํ•ด ์ฃผ์—ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  mapCopy์˜ ๋ฐฐ์—ด์„ ํ™•์ธํ•˜์—ฌ ์•ˆ์ „ ์˜์—ญ ํฌ๊ธฐ๋ฅผ ๊ตฌํ•ด์ฃผ์—ˆ๋‹ค.
๋‹คํ–‰ํžˆ ๋ฐฐ์—ด ํฌ๊ธฐ๊ฐ€ ํฌ์ง€ ์•Š์•„ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋œจ์ง€ ์•Š์•˜๋Š”๋ฐ ์™„์ „ ํƒ์ƒ‰ ๋ชฉ์ ์œผ๋กœ ๋‚ธ ๋ฌธ์ œ๋กœ ์˜ˆ์ƒํ•œ๋‹ค.

ํƒœ๊ทธ: , , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: