코딩 테스트/JAVA - 백준 단계별로 풀어보기
[백준 Java] 브루트 포스 - 1018번: 체스판 다시 칠하기
kms152000
2025. 2. 20. 14:26
import java.io.*;
import java.util.Map;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int min = Integer.MAX_VALUE;
char[][] board = new char[N][M];
for (int i = 0; i < N; i++) {
char[] temp = br.readLine().toCharArray(); // 행마다 배열로 바꾸기
for (int j = 0; j < M; j++) {
board[i][j] = temp[j];
}
}
for (int i = 0; i <= N - 8; i++) { // 최소인 8칸을 확보하기 위한 시작 범위 설정
for (int j = 0; j <= M - 8; j++) {
int count = 0; // 판이 바뀔 때 마다 변수 초기화
for (int k = i; k < i + 8; k++) {
for (int l = j; l < j + 8; l++) {
if ((k + l) % 2 == 1 && board[k][l] == 'W') { // 좌측 최상단을 W로 만드는 조건
count++;
} else if ((k + l) % 2 == 0 && board[k][l] == 'B') { // 좌측 최상단을 W로 만드는 조건
count++;
}
}
}
min = Math.min(min, Math.min(count, 64 - count)); // 최소를 구하려면 W와 B의 기준이 없어야 하는데 위 조건문에서 W를 기준으로 잡았기 때문에 B시작 경우도 고려하기 위해서 64(모든 경우의 수) - count
}
}
bw.write(String.valueOf(min));
br.close();
bw.flush();
bw.close();
}
}