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();
}
}
}
정답...
그냥 모든 경우의 수를 다 사용해서 해결하였다.
처음에 문제를 잘못 이해해서 불필요한 코드가 있는데 그대로 해결 가능해서 일단 그대로 사용했다.