Algorithm/BOJ

C#) [BOJ] 1018 체스판 다시 칠하기

HSH12345 2023. 1. 23. 18:37

1018번: 체스판 다시 칠하기 (acmicpc.net)

 

1018번: 체스판 다시 칠하기

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

www.acmicpc.net

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace _230123_1
{
    class Program
    {
        static void Main(string[] args)
        {
            StreamReader sr = new StreamReader(Console.OpenStandardInput());
            StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());

            string[] arr0 = sr.ReadLine().ToString().Split(' ');
            int N = int.Parse(arr0[0]);  //세로
            int M = int.Parse(arr0[1]); ;  //가로

            string[] arr = new string[N];
            for(int i = 0; i < N; i++)
            {
                arr[i] = sr.ReadLine();
            }

            bool iswhite = false;
            bool turn = true;
            List<int> cntList = new List<int>();

            for(int i = 0; i < N - 7; i++)
            {
                for(int j = 0; j < M - 7; j++)
                {                    
                    if (arr[i][j] == 'W')
                    {
                        iswhite = true;
                    }

                    int cnt0 = 0;
                    int cnt1 = 0;

                    for (int k = i; k < i + 8; k++)
                    {
                        for(int l = j; l < j + 8; l++)
                        {      
                            if(turn && iswhite)
                            {
                                if(arr[k][l] != 'W')
                                {
                                    cnt0++;                                    
                                }

                                if (arr[k][l] != 'B')
                                {
                                    cnt1++;
                                }
                                turn = false;                               
                            }
                            else if (!turn && iswhite)
                            {
                                if (arr[k][l] != 'B')
                                {
                                    cnt0++;                                    
                                }

                                if (arr[k][l] != 'W')
                                {
                                    cnt1++;
                                }
                                turn = true;                               
                            }
                            else if (turn && !iswhite)
                            {
                                if (arr[k][l] != 'B')
                                {
                                    cnt0++;                                    
                                }

                                if (arr[k][l] != 'W')
                                {
                                    cnt1++;
                                }
                                turn = false;                               
                            }
                            else if (!turn && !iswhite)
                            {
                                if (arr[k][l] != 'W')
                                {
                                    cnt0++;                                    
                                }

                                if (arr[k][l] != 'B')
                                {
                                    cnt1++;
                                }
                                turn = true;                                
                            }
                        }

                        if (iswhite == true)
                        {
                            iswhite = false;
                        }
                        else if (iswhite == false)
                        {
                            iswhite = true;
                        }
                    }

                    cntList.Add(cnt0);
                    cntList.Add(cnt1);
                }
            }

            sw.WriteLine(cntList.Min());

            sr.Close();
            sw.Flush();
            sw.Close();            
        }
    }
}

 

정답...

그냥 모든 경우의 수를 다 사용해서 해결하였다.

처음에 문제를 잘못 이해해서 불필요한 코드가 있는데 그대로 해결 가능해서 일단 그대로 사용했다.