쵼쥬 2022. 3. 4. 10:15


내 코드

package com.company;

import java.io.*;
import java.util.*;

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

        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        int[][] d = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
        int[][] arr = new int[N][M];
        Queue<int[]> q = new LinkedList<>();
        ArrayList<int[]> list = new ArrayList<>();
        ArrayList<int[]> virList = new ArrayList<>();
        boolean[][] visited = null;
        int count = 0;
        int answer = 0;

        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            for (int j = 0; j < M; j++) {
                arr[i][j] = Integer.parseInt(st.nextToken());
                if (arr[i][j] == 2) {
                    virList.add(new int[]{i, j});
                } else if (arr[i][j] == 0) {
                    list.add(new int[]{i, j});
                }
            }
        }

        for (int i = 0; i < list.size(); i++) {
            for (int j = i + 1; j < list.size(); j++) {
                for (int k = j + 1; k < list.size(); k++) {
                    arr[list.get(i)[0]][list.get(i)[1]] = 1;
                    arr[list.get(j)[0]][list.get(j)[1]] = 1;
                    arr[list.get(k)[0]][list.get(k)[1]] = 1;

                    visited = new boolean[N][M];
                    q.addAll(virList);
                    count = 3;
                    while (!q.isEmpty()) {
                        int[] vir = q.poll();

                        for (int u = 0; u < 4; u++) {
                            int x = vir[0] + d[u][0];
                            int y = vir[1] + d[u][1];
                            if (x >= 0 && y >= 0 && x < N && y < M && !visited[x][y] && arr[x][y] == 0) {
                                visited[x][y] = true;
                                count++;
                                q.add(new int[]{x, y});
                            }
                        }
                    }
                    arr[list.get(i)[0]][list.get(i)[1]] = 0;
                    arr[list.get(j)[0]][list.get(j)[1]] = 0;
                    arr[list.get(k)[0]][list.get(k)[1]] = 0;
                    answer = Math.max(answer, list.size() - count);
                }
            }
        }
        System.out.println(answer);
    }
}