๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜

[Java] BOJ 1018 ์ฒด์ŠคํŒ ๋‹ค์‹œ ์น ํ•˜๊ธฐ

by ๐ŸŠ๊ทค๐ŸŠ 2024. 7. 17.

๋ฌธ์ œ 

๋ฌธ์ œ ๋งํฌ https://www.acmicpc.net/problem/1018

  • MN๊ฐœ์˜ ๋‹จ์œ„ ์ •์‚ฌ๊ฐํ˜•์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋Š” M×N ํฌ๊ธฐ์˜ ๋ณด๋“œ๋ฅผ ์ฐพ์•˜๋‹ค.
  • ์ง€๋ฏผ์ด๋Š” ์ด ๋ณด๋“œ๋ฅผ ์ž˜๋ผ์„œ 8×8 ํฌ๊ธฐ์˜ ์ฒด์ŠคํŒ์œผ๋กœ ๋งŒ๋“ค๋ ค๊ณ  ํ•œ๋‹ค.
  • ์ฒด์ŠคํŒ์€ ๊ฒ€์€์ƒ‰๊ณผ ํฐ์ƒ‰์ด ๋ฒˆ๊ฐˆ์•„์„œ ์น ํ•ด์ ธ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ๊ตฌ์ฒด์ ์œผ๋กœ, ๊ฐ ์นธ์ด ๊ฒ€์€์ƒ‰๊ณผ ํฐ์ƒ‰ ์ค‘ ํ•˜๋‚˜๋กœ ์ƒ‰์น ๋˜์–ด ์žˆ๊ณ , ๋ณ€์„ ๊ณต์œ ํ•˜๋Š” ๋‘ ๊ฐœ์˜ ์‚ฌ๊ฐํ˜•์€ ๋‹ค๋ฅธ ์ƒ‰์œผ๋กœ ์น ํ•ด์ ธ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ๋”ฐ๋ผ์„œ ์ด ์ •์˜๋ฅผ ๋”ฐ๋ฅด๋ฉด ์ฒด์ŠคํŒ์„ ์ƒ‰์น ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋‘ ๊ฐ€์ง€๋ฟ์ด๋‹ค. ํ•˜๋‚˜๋Š” ๋งจ ์™ผ์ชฝ ์œ„ ์นธ์ด ํฐ์ƒ‰์ธ ๊ฒฝ์šฐ, ํ•˜๋‚˜๋Š” ๊ฒ€์€์ƒ‰์ธ ๊ฒฝ์šฐ์ด๋‹ค.
  • ๋ณด๋“œ๊ฐ€ ์ฒด์ŠคํŒ์ฒ˜๋Ÿผ ์น ํ•ด์ ธ ์žˆ๋‹ค๋Š” ๋ณด์žฅ์ด ์—†์–ด์„œ, ์ง€๋ฏผ์ด๋Š” 8×8 ํฌ๊ธฐ์˜ ์ฒด์ŠคํŒ์œผ๋กœ ์ž˜๋ผ๋‚ธ ํ›„์— ๋ช‡ ๊ฐœ์˜ ์ •์‚ฌ๊ฐํ˜•์„ ๋‹ค์‹œ ์น ํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. 
  • ๋‹น์—ฐํžˆ 8*8 ํฌ๊ธฐ๋Š” ์•„๋ฌด๋ฐ์„œ๋‚˜ ๊ณจ๋ผ๋„ ๋œ๋‹ค. ์ง€๋ฏผ์ด๊ฐ€ ๋‹ค์‹œ ์น ํ•ด์•ผ ํ•˜๋Š” ์ •์‚ฌ๊ฐํ˜•์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.
  • ์ฒซ์งธ ์ค„์— N๊ณผ M์ด ์ฃผ์–ด์ง„๋‹ค.
  • N๊ณผ M์€ 8๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.
  • ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๋ณด๋“œ์˜ ๊ฐ ํ–‰์˜ ์ƒํƒœ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. B๋Š” ๊ฒ€์€์ƒ‰์ด๋ฉฐ, W๋Š” ํฐ์ƒ‰์ด๋‹ค.
  • ์ฒซ์งธ ์ค„์— ์ง€๋ฏผ์ด๊ฐ€ ๋‹ค์‹œ ์น ํ•ด์•ผ ํ•˜๋Š” ์ •์‚ฌ๊ฐํ˜• ๊ฐœ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.  

์•„์ด๋””์–ด

  • ์ฒ˜์Œ์‹œ์ž‘์ด W์ธ์ง€ B์ธ์ง€ ๋‚˜๋ˆ ์„œ ์‹์„ ์ ์—ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ํ–‰์˜ ํ™€์ˆ˜๋ฒˆ์งธ์™€ ์ง์ˆ˜๋ฒˆ์งธ, ์—ด์˜ ํ™€์ˆ˜๋ฒˆ์งธ์™€ ์ง์ˆ˜๋ฒˆ์งธ๋ฅผ ๊ฐ๊ฐ ์กฐํ•ฉํ•˜๊ณ  ๊ตฌ๋ถ„ํ•ด์„œ ํ•ด๋‹น ์œ„์น˜์— ๋งž๋Š” ๋ฌธ์ž๊ฐ€ ์•ˆ์˜จ๋‹ค๋ฉด ์นด์šดํŠธ๋ฅผ ์‹œ์ผœ 8 * 8 ์ฒด์ŠคํŒ์„ ๋‹ค ๋Œ์•˜์„ ๋•Œ ๋‚˜์˜จ ์นด์šดํŠธ ์ˆ˜๊ฐ€ ์ตœ์†Ÿ๊ฐ’๋ณด๋‹ค ์ž‘์œผ๋ฉด ์ตœ์†Ÿ๊ฐ’์„ ๊ฐฑ์‹ ์‹œ์ผฐ๋‹ค. 

๊ฒช์€ ์‹œํ–‰์ฐฉ์˜ค

  • X

์ฝ”๋“œ๊ฐ€ ์กฐ๊ธˆ ๋”๋Ÿฝ๊ธดํ•˜์ง€๋งŒ... ํ’€๋ ค์„œ ๋‹คํ–‰์ด๋‹ค... ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋ฉด ๊ณต๋ถ€ํ•ด์„œ ํ’€์–ด๋ด์•ผ๊ฒ ๋‹ค..ใ…œใ…œ

์ฝ”๋“œ

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

public class BOJ1018 {
    public static void main(String[] args) throws Exception{
        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());

        // ์ฒด์ŠคํŒ์„ ๋ฐ”๊พธ๋Š” ์ตœ์†Ÿ๊ฐ’์„ ์ €์žฅํ•  ๋ณ€์ˆ˜
        int min = Integer.MAX_VALUE;

        // ์ฒด์ŠคํŒ ์ €์žฅ ๋ฐฐ์—ด
        String board[][] = new String[N][M];

        // ์ฒด์ŠคํŒ์— ์ƒ‰ ์ €์žฅ
        for(int i = 0; i < N; i++){
            String bw = br.readLine();

            for(int j = 0; j < M; j++){
                board[i][j] = bw.split("")[j];
            }
        }

        // N์ด 8๋ณด๋‹ค ์ปค์„œ ์‹œ์ž‘์ ์˜ ์œ„์น˜๊ฐ€ ๋ณ€ํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ
        for(int i = 0; i <= (N - 8); i++){
            // M์ด 8๋ณด๋‹ค ์ปค์„œ ์‹œ์ž‘์ ์˜ ์œ„์น˜๊ฐ€ ๋ณ€ํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ
            for(int j = 0; j <= (M - 8); j++){

                // W๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ฒด์ŠคํŒ์—์„œ ๋ฐ”๊ฟ”์•ผ๋  ์ˆ˜
                int w_s = 0;
                // B๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ฒด์ŠคํŒ์—์„œ ๋ฐ”๊ฟ”์•ผ๋  ์ˆ˜
                int b_s = 0;

                // ํ–‰์ด ๋ช‡๋ฒˆ์งธ์ธ์ง€ ์•Œ๋ ค์ฃผ๋Š” ๋ณ€์ˆ˜
                int r_s = 0;
                // ์—ด์ด ๋ช‡๋ฒˆ์งธ์ธ์ง€ ์•Œ๋ ค์ฃผ๋Š” ๋ณ€์ˆ˜
                int c_s = 0;

                // ํ–‰์˜ ์‹œ์ž‘์ ์„ i๋กœ ์ง€์ •
                for(int k = i; k < i + 8; k++){
                    // ์—ด์˜ ์‹œ์ž‘์ ์„ j๋กœ ์ง€์ •
                    for(int l = j; l < j + 8; l++){
                        // ๋งŒ์•ฝ ํ–‰์ด ์ง์ˆ˜๋ฒˆ์งธ(0ํฌํ•จ)์ด๊ณ  ์—ด๋„ ์ง์ˆ˜๋ฒˆ์งธ์ผ๋•Œ
                        if((r_s % 2 == 0) && (c_s % 2 == 0)){
                            // ํ•ด๋‹น ๊ฐ’์ด W๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด
                            if(!(board[k][l].equals("W"))){
                                // w๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ฒด์ŠคํŒ์—์„œ ๋ฐ”๊ฟ”์•ผ๋˜๋Š” ์ˆ˜ + 1
                                w_s = w_s  + 1;
                            }

                            // ํ•ด๋‹น ๊ฐ’์ด B๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด
                            if(!(board[k][l].equals("B"))){
                                // b๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ฒด์ŠคํŒ์—์„œ ๋ฐ”๊ฟ”์•ผ๋˜๋Š” ์ˆ˜ + 1
                                b_s = b_s  + 1;
                            }
                        }
                        // ๋งŒ์•ฝ ํ–‰์ด ํ™€์ˆ˜๋ฒˆ์งธ์ด๊ณ  ์—ด์ด ์ง์ˆ˜๋ฒˆ์งธ์ผ๋•Œ
                        else if((r_s % 2 == 1) && (c_s % 2 == 0)){
                            // ํ•ด๋‹น ๊ฐ’์ด B๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด
                            if(!(board[k][l].equals("B"))){
                                // w๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ฒด์ŠคํŒ์—์„œ ๋ฐ”๊ฟ”์•ผ๋˜๋Š” ์ˆ˜ + 1
                                w_s = w_s  + 1;
                            }

                            // ํ•ด๋‹น ๊ฐ’์ด W๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด
                            if(!(board[k][l].equals("W"))){
                                // b๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ฒด์ŠคํŒ์—์„œ ๋ฐ”๊ฟ”์•ผ๋˜๋Š” ์ˆ˜ + 1
                                b_s = b_s  + 1;
                            }
                        }
                        // ๋งŒ์•ฝ ํ–‰์ด ์ง์ˆ˜๋ฒˆ์งธ์ด๊ณ (0ํฌํ•จ) ์—ด์ด ํ™€์ˆ˜๋ฒˆ์งธ์ผ๋•Œ
                        else if((r_s % 2 == 0) && (c_s % 2 == 1)){
                            // ํ•ด๋‹น ๊ฐ’์ด B๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด
                            if(!(board[k][l].equals("B"))){
                                // w๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ฒด์ŠคํŒ์—์„œ ๋ฐ”๊ฟ”์•ผ๋˜๋Š” ์ˆ˜ + 1
                                w_s = w_s  + 1;
                            }

                            // ํ•ด๋‹น ๊ฐ’์ด W๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด
                            if(!(board[k][l].equals("W"))){
                                // b๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ฒด์ŠคํŒ์—์„œ ๋ฐ”๊ฟ”์•ผ๋˜๋Š” ์ˆ˜ + 1
                                b_s = b_s  + 1;
                            }
                        }
                        else if((r_s % 2 == 1) && (c_s % 2 == 1)){
                            // ํ•ด๋‹น ๊ฐ’์ด W๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด
                            if(!(board[k][l].equals("W"))){
                                // w๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ฒด์ŠคํŒ์—์„œ ๋ฐ”๊ฟ”์•ผ๋˜๋Š” ์ˆ˜ + 1
                                w_s = w_s  + 1;
                            }

                            // ํ•ด๋‹น ๊ฐ’์ด B๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด
                            if(!(board[k][l].equals("B"))){
                                // b๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ฒด์ŠคํŒ์—์„œ ๋ฐ”๊ฟ”์•ผ๋˜๋Š” ์ˆ˜ + 1
                                b_s = b_s  + 1;
                            }
                        }

                        // ์—ด ์นด์šดํŠธ + 1
                        c_s = c_s + 1;
                    }
                    // ์—ด ์นด์šดํŠธ ์ดˆ๊ธฐํ™”
                    c_s = 0;

                    // ํ–‰ ์นด์šดํŠธ + 1
                    r_s = r_s + 1;
                }

                // ์œ„์—์„œ ์„ผ ์นด์šดํŠธ๋“ค๋กœ ์ตœ์†Ÿ๊ฐ’ ๊ฐฑ์‹ 
                if(w_s < min){
                    min = w_s;
                }

                if(b_s < min){
                    min = b_s;
                }
            }
        }

        System.out.println(min);
    }
}