백준 1018(체스판 어려움)!!!!

김경욱·2025년 9월 13일

백준

목록 보기
81/121

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import java.util.*;

import static java.util.Collections.*;

public class Main {
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());

   char[][] chess = new char[N][M];

   for (int i = 0 ; i < N; i++)
   {
       chess[i] = br.readLine().toCharArray();
   }


   int min = Integer.MAX_VALUE;

   for (int i = 0 ; i <= N-8; i++)
   {
       for (int j = 0 ; j <= M -8; j++)
       {
           int repaint1 = 0;
           int repaint2 = 0;


           for (int x = 0; x <8; x++)
           {
               for (int y = 0 ; y < 8; y++)
               {
                   char expected1 = ((x+y) % 2 == 0) ? 'W' : 'B';
                   char expected2 = ((x+y) % 2 == 0) ? 'B' : 'W';

                   if (chess[i+x][j+y] !=expected1) repaint1++;
                   if (chess[i+x][j+y] != expected2) repaint2++;


               }
           }


           min = Math.min(min,Math.min(repaint1,repaint2));

       }


   }
    System.out.println(min);




















}
}

맨 처음에 변수 min에 최대값을 넣은건 어차피 min값을 다시 초기화시킬려고 최대값을 넣은 것이다. 또한 체스판에서 8판을 만들어야하므로 i<=N-8 , j <=M-8로 설정한다. 그런다음에 체스판에 두가지 경우가 발생한다. 왼쪽 위가 하얀색인지 검은색인지이다. 그래서 repaint1은 왼쪽 위가 흰색인 경우 다시 칠해야할 수, repaint2는 왼쪽 위가 검은색인 경우 다시 칠해야할 수이다. 그런 다음에 x,y 변수를 이용하여 8X8 판을 만든다. 이때 expected1,expected2는 칸의 위치가 x랑 y를 더한 값이 2로 나누어떨어지는 지 판단하여 색깔을 부여한다. 그런다음 실제 체스판인 chess[i+x][j+y]와 비교하여 다르면 repaint1와 repaint2를 하나씩 증가시킨다. 그 후에 repaint1,repaint2의 최솟값을 구한 후 그 값을 출력하면 된다.

0개의 댓글