백준 1018번 체스판 다시 칠하기(java)

마뇽미뇽·2024년 7월 15일
0

알고리즘 문제풀이

목록 보기
78/165

1.문제

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

2.풀이

https://comain.tistory.com/192 님을 참고했다.
8줄의 w로 시작하는 판과 b로 시작하는 판을 만들고 입력해야할 문제예제와 비교하는 형식의 풀이법이다.
8 8은 고정이니까 그 이후에서 다른 점을 찾아야 하므로 n-7,m-7을 해서 반복문을 돌려준다.
흰 보드판과 검은 보드판은 8
8이므로 반복문을 돌려준다.
그 안에서 검은 보드판 또는 흰 보드판에 단어가 규칙에 따라 같은 단어가 아닐 겅우 카운트값을 증가시킨다. 이후 8 * 8의 최소 값인 64와 비교해 최소값을 출력한다.

3.코드

package com.example.baekjoon;

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

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());

        String example[] = new String[n];

        for (int i = 0; i < n; i++) {
            example[i] = br.readLine();
        }

        String whiteboard[] = new String[8];
        String blackboard[] = new String[8];

        for (int i = 0; i < 8; i++) {   //  검은 보드
            if (i % 2 == 0) {
                blackboard[i] = "BWBWBWBW";
            } else {
                blackboard[i] = "WBWBWBWB";
            }
        }

        for (int i = 0; i < 8; i++) {   //  흰 보드
            if (i % 2 == 0) {
                whiteboard[i] = "WBWBWBWB";
            } else {
                whiteboard[i] = "BWBWBWBW";
            }
        }

        int min = 64;   //   8*8
        for (int i = 0; i < (n - 7); i++) {
            for (int j = 0; j < (m - 7); j++) {
                int wcnt = 0;
                int bcnt = 0;
                for (int k = 0; k < 8; k++) {
                    for (int l = 0; l < 8; l++) {
                        if (whiteboard[k].charAt(l) != example[k + i].charAt(l + j)) {
                            wcnt++;
                        }
                        if (blackboard[k].charAt(l) != example[k + i].charAt(l + j)) {
                            bcnt++;
                        }
                    }
                }
                min = Math.min(min,Math.min(wcnt, bcnt));
            }
        }

        System.out.println(min);
    }
}
profile
Que sera, sera

0개의 댓글