Boj 1018 체스판 다시 칠하기
Updated:
문제 링크 : 백준 https://www.acmicpc.net/problem/1018
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringBuilder sb = new StringBuilder();
static StringTokenizer st;
static Boolean map [][];
static int N,M;
static int min =64;
public static void main(String[] args) throws IOException {
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
map = new Boolean[N][M];
//전체 맵 받기
for(int i=0;i<N;i++) {
String in = br.readLine();
for(int j=0;j<M;j++) {
//W = True , B = False
if(in.charAt(j)=='W') {
map[i][j]=true;
}else {
map[i][j]=false;
}
}
}
// 확인용
// for(int i=0;i<N;i++) {
// for(int j=0;j<M;j++) {
// System.out.print(map[i][j]+" ");
// }
// System.out.println();
// }
// 완전탐색
// 1~8, 2~9, ..., M-7~M 가로
// 1~8, 2~9, ..., N-7~N 세로
for(int i=0;i<N-7;i++) {
for(int j=0;j<M-7;j++) {
find(i,j);
}
}
System.out.println(min);
}
private static void find(int x, int y) {
// 첫번째 값
boolean flag = map[x][y];
int count = 0;
for(int i=x;i<x+8;i++) {
for(int j=y;j<y+8;j++) {
if(map[i][j]!=flag) {
count++;
}
flag =(!flag);
}
flag=(!flag);
}
count = Math.min(count,64-count);
min = Math.min(count, min);
}
}
Leave a comment