내 코드
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);
}
}
'코딩테스트 > [백준] 코딩테스트 연습' 카테고리의 다른 글
통나무 옮기기 (0) | 2022.03.10 |
---|---|
2048 (Easy) - 12100번 (0) | 2022.03.07 |
동작 그만. 밑장 빼기냐? - 20519번 (0) | 2022.03.02 |
강의실 배정 - 11000번 (0) | 2022.02.28 |
찾기 - 1786번 (0) | 2022.02.24 |