본문 바로가기

코딩 문제/백준

백준 - 1018번

728x90

 

풀이

 

import java.util.Scanner;

 

public class Main {

 

      public static int min = 64;

      public static int[][] arr;

 

      public static void main(String[] args) {

 

            Scanner scan = new Scanner(System.in);

            int x = scan.nextInt(); // 행

            int y = scan.nextInt(); // 열

 

            arr = new int[x][y];

            String[] arr2;

            scan.nextLine();

            // 입력받기

            for(int i=0; i<x; i++){

                  arr2 = scan.nextLine().split("");

                  for(int j=0; j<y; j++){

                        if("B".equals(arr2[j])) {

                              arr[i][j] = 1;

                        }else {

                              arr[i][j] = -1;

                        }

                  }

            }

            int xSize = x-7;

            int ySize = y-7;

            // 중복 최소 찾기

            for(int i=0; i<xSize; i++){

                  for(int j=0; j<ySize; j++){

                        find(i, j);

                  }

            }

            System.out.println(min);

      }

 

      private static void find(int hang, int start){

            int change = 0; // 변경해야 될 개수

            int change2 = 0; // 변경해야 될 개수

            int hang_last = hang+8;

            int start_last = start+8;

            int check = 1;

            // B와 W 개수 Count

            for(int i=hang; i<hang_last; i++) {

                  check *= -1;

                  for(int j=start; j<start_last; j++) {

                        if(arr[i][j] != check) {

                              change++;

                        }

                        check *= -1;

                  }

            }

            check = -1;

            for(int i=hang; i<hang_last; i++) {

                  check *= -1;

                  for(int j=start; j<start_last; j++) {

                        if(arr[i][j] != check) {

                              change2++;

                        }

                        check *= -1;

                  }

            }

            if(change > change2) {

                  if(min > change2) {

                        min = change2;

                  }

            }else {

                  if(min > change) {

                        min = change;

                  }

            }

      }

}

'코딩 문제 > 백준' 카테고리의 다른 글

백준 - 1059번  (0) 2021.03.15
백준 - 1037번  (0) 2021.03.15
백준 - 1010번  (0) 2021.02.26
백준 - 1009번  (0) 2021.02.26
백준 - 18405번  (0) 2021.02.16