세상에 나쁜 코드는 없다
[백준] 1018번: 체스판 다시 칠하기 본문
https://www.acmicpc.net/problem/1018
#include <iostream>
using namespace std;
char board[50][50];
int row, col;
void init()
{
cin >> row >> col;
for(int i=0; i<row; i++)
{
for(int j=0; j<col; j++)
{
cin >> board[i][j];
}
}
}
// board[r][c]에서 시작하는 8*8 체스판에서 칠해야하는 가장 적은 값 반환
int getMinAtBoard(int r, int c)
{
int count=0;
for(int i=r; i<r+8; i++)
{
for(int j=c; j<c+8; j++)
{
if((i+j) % 2 ==0 && board[i][j]=='W')
count++;
if((i+j) % 2 ==1 && board[i][j]=='B')
count++;
}
}
if(count > 32)
count = 64 - count;
return count;
}
int main() {
init();
int min=32, temp_min;
for(int i=0; i< row-7; i++)
{
for(int j=0; j<col-7; j++)
{
temp_min = getMinAtBoard(i,j);
if(min > temp_min)
min = temp_min;
}
}
cout << min;
return 0;
}
1. getMinAtBoard 함수에서, i+j 를 2로 나눈 나머지에 따라 같은 색이 칠해져야 한다는 점을 반영하여 count를 늘려주었고,
왼쪽 상단이 흰색이냐 검은색이냐에 따라 달라지는 값은 n과 64-n의 관계이므로 둘 중 작은 값을 반환하게 만들었다.
(코드상에서 count는 왼쪽 상단이 B인 경우를 기준으로 다시 색을 칠해야 할때마다 1씩 올려주는 방식으로 만들었음)
'Computer Science > Problem Solving' 카테고리의 다른 글
[백준] 2630번: 색종이 만들기 (0) | 2021.03.10 |
---|---|
[백준] 15661번: 링크와 스타트 (0) | 2021.03.01 |
[백준] 7568번: 덩치 (0) | 2021.03.01 |
[백준] 4096번: 팰린드로미터 (0) | 2021.03.01 |
[백준] 2615번 오목 (0) | 2021.01.31 |