백준 1018 체스판 다시 칠하기 [Java]

빨대씹는버릇있음·2023년 3월 21일

백준 실버

목록 보기
10/25

참고❤️click

코드

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

public class Main {
	
	public static boolean [][] board;
	public static int min = 64;
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		Scanner in = new Scanner(System.in);
		
		
		
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		int n = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());
		
		board = new boolean[n][m];
		
		for(int i=0; i<n; i++) {
			String line = br.readLine();
			for(int j=0; j<m; j++) {
				if(line.charAt(j) == 'W') board[i][j] = true;  //화이트
				else board[i][j] = false;  //블랙
			}
		}
		
		
		
		for(int i=0; i<n-8+1; i++) {  //가로	
			for(int j=0; j<m-8+1; 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 color = board[x][y];
		
		for(int i=x; i<end_x; i++) {
			for(int j=y; j<end_y; j++) {
				
				if(board[i][j] != color) cnt++;
				
				color = !color;
				
			}
			color = !color;
		}
		
		cnt = Math.min(cnt, 64-cnt);
		
		min = Math.min(min, cnt);  //최솟값 갱신
	}

	
}

2023-03-21

0개의 댓글