목차
https://www.acmicpc.net/problem/1018
코드
#include <iostream>
using namespace std;
char case1[8][8] =
{{'W','B','W','B','W','B','W','B'},
{'B','W','B','W','B','W','B','W'},
{'W','B','W','B','W','B','W','B'},
{'B','W','B','W','B','W','B','W'},
{'W','B','W','B','W','B','W','B'},
{'B','W','B','W','B','W','B','W'},
{'W','B','W','B','W','B','W','B'},
{'B','W','B','W','B','W','B','W'}};
char case2[8][8] =
{{'B','W','B','W','B','W','B','W'},
{'W','B','W','B','W','B','W','B'},
{'B','W','B','W','B','W','B','W'},
{'W','B','W','B','W','B','W','B'},
{'B','W','B','W','B','W','B','W'},
{'W','B','W','B','W','B','W','B'},
{'B','W','B','W','B','W','B','W'},
{'W','B','W','B','W','B','W','B'}};
int main() {
int n, m, answer = 99999999;
cin >> n >> m;
char board[n][m];
for(int i=0; i<n; i++)
{
string line;
cin >> line;
for(int j=0; j<m; j++)
{
board[i][j] = line[j];
}
}
for(int i=0; i<n-7; i++)
{
for(int j=0; j<m-7; j++)
{
int diff1 = 0;
int diff2 = 0;
for(int x=0; x<8; x++)
{
for(int y = 0; y < 8; y++)
{
if(board[i+x][j+y] != case1[x][y]) diff1++;
if(board[i+x][j+y] != case2[x][y]) diff2++;
}
}
int small_diff = diff1 < diff2 ? diff1 : diff2;
answer = small_diff < answer ? small_diff : answer;
}
}
cout << answer;
return 0;
}
설명
예전에 맨 처음 이 문제를 접했을때는 진짜 3시간을 고민하고도 못 풀어서 굉장히 좌절했었던 기억이 있다.
이번에는 비교적 꽤 쉽게 풀 수 있었는데
그냥 주어진 판에서 8X8 로 자를 수 있는 모든 부분을 정상적인 체스판와 대입해서 얼마나 차이가 있는지 확인하면 된다. 그 차이가 가장 적은 수를 출력.
'공부 > 백준(C++) - 2022~' 카테고리의 다른 글
백준 2750번: 수 정렬하기[C++] (0) | 2022.01.26 |
---|---|
백준 1436번: 영화감독 숌 [C++] (0) | 2022.01.25 |
백준 7568번: 덩치 [C++] (0) | 2022.01.25 |
백준 2231번: 분해합 [C++] (0) | 2022.01.25 |
백준 2798번: 블랙잭 [C++] (0) | 2022.01.25 |