[백준 / Java] 1018번: 체스판 다시 칠하기 (브루트포스 알고리즘)

2025. 2. 4. 09:36·CS & Algorithm

 

 

오늘의 문제는 백준 1018번 '체스판 다시 칠하기'다.

 

 

 

 

접근 방법

  1. M*N 크기의 보드를 8*8 크기의 체스판으로 잘라낸 후 다시 칠해야 하는 정사각형의 최소 개수를 구한다.
  2. 체스판은 검은색과 흰색이 번갈아서 칠해쳐 있어야 한다.

 


알고리즘 진행 순서

  1. 입력된 값을 배열에 넣는다.
  2. 8 x 8 크기의 체스판을 자를 수 있는 구간 안에서 다시 칠해야 하는 값(count)의 최소값을 구한다.
  3. count는 8 x 8  체스판 안에서 시작 색과 같을 경우와 아닌 경우를 구분하여 각각 다시 칠해야 하는 개수를 ++하고 그 중 최솟값을 반환한다.
  4. 최솟값을 출력한다.

 


구현 코드

package Boj;
// 체스판 다시 칠하기

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

public class Boj1018 {
    static int N, M = 0;
    static char[][] arr;
    static int min = Integer.MAX_VALUE;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());
        arr = new char[N][M];

        for (int i = 0; i < N; i++) {
            String line = br.readLine();
            for (int j = 0; j < M; j++) {
                arr[i][j] = line.charAt(j);
            }
        }

        for (int i = 0; i < N - 7; i++) {  // 체스판을 자를 수 있는 시작점
            for (int j = 0; j < M - 7; j++) {
                min = Math.min(min, getCount(i, j));
            }
        }
        System.out.println(min);
    }

    static int getCount(int x, int y) {
        int countX = 0;
        int countY = 0;

        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 8; j++) {
                char cur = arr[x + i][y + j];

                if ((i + j) % 2 == 0) {
                    if (cur != 'W') countX++;
                    if (cur != 'B') countY++;
                } else {
                    if (cur != 'B') countX++;
                    if (cur != 'W') countY++;
                }
            }
        }

        return Math.min(countX, countY);
    }
}



회고

  1. 문제 아이디어를 쉽게 생각해내지 못해서 검색을 시도했다.
  2. 체스판을 자를 수 있는 시작점 (N-7, M-7)을 쉽게 이해하지 못했다.
  3. 연습을 더 많이 하자!!!

'CS & Algorithm' 카테고리의 다른 글

[백준 / Java] 2529번: 부등호 (브루트포스 + 백트래킹)  (0) 2025.02.05
[백준 / Java] 1051번: 숫자 정사각형 (브루트포스 알고리즘)  (1) 2025.02.04
[99클럽 코테 스터디] 10일차 TIL - 백준 2573번 빙산(자바 Java)  (0) 2025.01.24
[99클럽 코테 스터디] 8일차 TIL - 백준 2667번 단지 번호 붙이기(자바 Java)  (0) 2025.01.23
[99클럽 코테 스터디] 6일차 TIL - 백준 1260번 DFS와 BFS  (0) 2025.01.20
'CS & Algorithm' 카테고리의 다른 글
  • [백준 / Java] 2529번: 부등호 (브루트포스 + 백트래킹)
  • [백준 / Java] 1051번: 숫자 정사각형 (브루트포스 알고리즘)
  • [99클럽 코테 스터디] 10일차 TIL - 백준 2573번 빙산(자바 Java)
  • [99클럽 코테 스터디] 8일차 TIL - 백준 2667번 단지 번호 붙이기(자바 Java)
whatdoyumin
whatdoyumin
안녕하세요, 꾸준히 성장하는 개발자..... 입니다
  • whatdoyumin
    whatdoyumin 님의 블로그
    whatdoyumin
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Frontend
      • Backend
      • Study & Course
      • CS & Algorithm
      • DevOps & Infra
      • Certification
      • Database
      • Project
      • atc.
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ResponseEntity
    frontend
    백엔드
    결제로직
    Spring
    coderabbit
    클라우드
    99클럽 #코딩테스트준비 #개발자취업 #항해99 #til#dp#동적계획법#코테#백준
    코드리뷰자동화
    99클럽 #코딩테스트준비 #개발자취업 #항해99 #til
    github자동리뷰
    타입스크립트
    devops
    ai코드리뷰
    zustand
    탐색알고리즘
    AWS자격증
    코드래빗
    Pruning
    개발자팁
    99클럽 #코딩테스트준비 #개발자취업 #항해99 #til #알고리즘 #브루트포스 #백준 #오목 #완전탐색 #코딩테스트
    백트래킹
    브루트포스
    Saa
    TypeScript
    자바스크립트 코테
    완전탐색
    백준 #백준2805번 #나무자르기 #이분탐색 #알고리즘
    githubworkflow
    전역상태관리
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
whatdoyumin
[백준 / Java] 1018번: 체스판 다시 칠하기 (브루트포스 알고리즘)
상단으로

티스토리툴바