백준 - 1018 : 체스판 다시 칠하기 [자바]

HungAh.log·2021년 8월 14일
0
post-custom-banner
import java.io.*;
import java.util.*;

public class Main {
	// M*N크기의 보드
	// 정사각형은 검은색, 나머지는 흰색
	// 이 보드를 잘라서 8*8크기의 체스판으로
	// 체스판은 검은색과 흰색이 번갈아서 칠해져 있어야 한다.
	// 맨 왼쪽 위 칸이 흰색이 경우 | 검은색인 경우
	// 8*8크기의 체스판으로 잘라낸 후에 몇 개의 정삭각형을 다시 칠한다.
	// 다시 칠해야 하는 정사각형의 최소 개수 구하기
	static boolean[][] chessboard;
	// static String[][] chessboard;
	static int N, M, countMin;
	static boolean[][] white = { { true, false, true, false, true, false, true, false },
			{ false, true, false, true, false, true, false, true, },
			{ true, false, true, false, true, false, true, false },
			{ false, true, false, true, false, true, false, true, },
			{ true, false, true, false, true, false, true, false },
			{ false, true, false, true, false, true, false, true, },
			{ true, false, true, false, true, false, true, false },
			{ false, true, false, true, false, true, false, true, } };
	static boolean[][] black = { { false, true, false, true, false, true, false, true, },
			{ true, false, true, false, true, false, true, false },
			{ false, true, false, true, false, true, false, true, },
			{ true, false, true, false, true, false, true, false },
			{ false, true, false, true, false, true, false, true, },
			{ true, false, true, false, true, false, true, false },
			{ false, true, false, true, false, true, false, true, },
			{ true, false, true, false, true, false, true, false } };

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();

		StringTokenizer st = new StringTokenizer(br.readLine());
		N = Integer.parseInt(st.nextToken()); // 행
		M = Integer.parseInt(st.nextToken()); // 열

		// 체스판 받기, 비교 빠르게 흰색은 true, 검은색은 false로 받아보자 
		chessboard = new boolean[N][M];
		for (int i = 0; i < N; i++) {
			String str = br.readLine();
			for (int j = 0; j < M; j++) {
				if (str.charAt(j) == 'W')
					chessboard[i][j] = true;
				else
					chessboard[i][j] = false;
			}
		}

		for (int i = 0; i <= N - 8; i++) {
			for (int j = 0; j <= M - 8; j++) {
				chess(i, j, white, chessboard);
				chess(i, j, black, chessboard);
			}
		}
		System.out.println(countMin);
	}

	static void chess(int n, int m, boolean[][] pan, boolean[][] chessboard) {
		int count = 0;
		for (int i = 0; i < 8; i++) {
			for (int j = 0; j < 8; j++) {
				if (chessboard[n + i][m + j] != pan[i][j])
					count++;
			}
		}
		countMin = Math.min(count, countMin);
	}
}
profile
👩🏻‍💻
post-custom-banner

0개의 댓글