본문 바로가기
알고리즘/문제풀이

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

by abcodef 2021. 11. 28.

🔗 문제 내용

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

 

1018번: 체스판 다시 칠하기

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

www.acmicpc.net

🌱 문제 풀이 방법

입력-> 8칸씩 자르면 이동하면서 자른 부분과 정확한 부분이 얼마만큼 틀린지 확인
반대케이스의 경우 64-위의 경우로 구할 수 있음

🤔 공부가 필요한 부분

배열 이해가 부족해 못풀고 있음
로직을 간결하게 할수 있을것 같음
class로 분리 해서 풀어야함

💻 코드

package test;

import java.util.Arrays;
import java.util.Scanner;

public class ps_1152 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        int n = sc.nextInt();
        char [][]chess = new char[m][n];
        int []count = new int[(m-7)*(n-7)];
        char [][]chessCase = {{'W','B','W','B','W','B','W','B'},{'B','W','B','W','B','W','B','W'},{'W','B','W','B','W','B','W','B'}
        ,{'B','W','B','W','B','W','B','W'},{'W','B','W','B','W','B','W','B'},{'B','W','B','W','B','W','B','W'}
        ,{'W','B','W','B','W','B','W','B'},{'B','W','B','W','B','W','B','W'}};

        int z = 0;
        int a = 0;
        int b=0;
        for(int i=0; i<m;i++) {
            String color=sc.next();
            for(int r=0; r<n;r++) {
                chess[i][r]=color.charAt(r);
            }
        }

        for(int i=0; i<m-7;i++) {
            for(int r=0;r<n-7;r++) {
                for(int p=i;p<i+8;p++) {
                    for(int q=r;q<r+8;q++) {
                        if(chessCase[a][b]!=chess[p][q]) {
                            count[z]+=1;
                        }
                        b+=1;
                    }
                    a+=1;
                    b=0;
                }
            }
        a=0;
        b=0;
        z+=1;
        }

        int min=count[0];
        for(int i=0; i<count.length;i++) {
            if(min>=count[i]) {
                min=count[i];
            }
        }
        System.out.println(min);
        }
}

댓글