코딩테스트/백준

백준 1018 : 체스판 다시칠하기 _ 자바 Java

플래시🦥 2023. 1. 9.
반응형

https://www.acmicpc.net/problem/1018

 

1018번: 체스판 다시 칠하기

첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.

www.acmicpc.net

 


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

public class Main {

	public static boolean[][] arr;
	public static int min = 64;
	
	public static void main(String[] args) throws IOException {

		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());
		
		arr = 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') {
					arr[i][j] = true;
				} else {
					arr[i][j] = false;
				}
			}
		}
		
		int N_row = N - 7;
		int M_col = M - 7;
		
		for(int i = 0 ; i < N_row ; i++) {
			for(int j = 0 ; j < M_col ; j++) {
				find(i, j);
			}
		}
		System.out.println(min);
		
	}

	public static void find(int x, int y) {
		int end_x = x + 8;
		int end_y = y + 8;
		int cnt = 0;
		
		boolean check = arr[x][y];
		
		for(int i = x ; i < end_x ; i++) {
			for(int j = y ; j < end_y ; j++) {
				if(arr[i][j] != check) {
					cnt++;
				}
				check = !check;
			}
			check = !check;
		}
		
		cnt = Math.min(cnt, 64 - cnt);
		min = Math.min(min, cnt);
	}
}

 

728x90
반응형

댓글