๋ฌธ์
์ง๋ฏผ์ด๋ ์์ ์ ์ ํ์์ MN๊ฐ์ ๋จ์ ์ ์ฌ๊ฐํ์ผ๋ก ๋๋์ด์ ธ ์๋ M*Nํฌ๊ธฐ์ ๋ณด๋๋ฅผ ์ฐพ์๋ค. ์ด๋ค ์ ์ฌ๊ฐํ์ ๊ฒ์ ์์ผ๋ก ์น ํด์ ธ์๊ณ , ๋๋จธ์ง๋ ํฐ์์ผ๋ก ์น ํด์ ธ ์๋ค. ์ง๋ฏผ์ด๋์ด ๋ณด๋๋ฅผ ์๋ผ์ 8*8ํฌ๊ธฐ์ ์ฒด์คํ์ผ๋ก ๋ง๋ค๋ ค๊ณ ํ๋ค.
ํ์ง๋ง ์ง๋ฏผ์ด๋ ์ด ๋ณด๋๊ฐ ์ฒด์คํ์ฒ๋ผ ๊ฒ์ /ํฐ์ ํจํด์ด ๋ฒ๊ฐ์๊ฐ๋ฉฐ ์์น ํด์ ธ์์ง ์๊ธฐ ๋๋ฌธ์ ๊ณ ๋ฏผ์ ๋น ์ก๋ค. ๋ฐ๋ผ์ ์ง๋ฏผ์ด๋ 8*8ํฌ๊ธฐ์ ์ฒด์คํ์ผ๋ก ์๋ผ๋ธ ํ์ ๋ช ๊ฐ์ ์ ์ฌ๊ฐํ์ ๋ค์ ์น ํด์ผ ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค. ๋น์ฐํ 8*8ํฌ๊ธฐ๋ ์๋ฌด๋ฐ์๋ ๊ณจ๋ผ๋ ๋๋ค.
ํ์ฌ ๋ณด๋์ ์์ด ์ด๋ค์ง ์ํ๊ฐ ์ฃผ์ด์ง ๋, ์ง๋ฏผ์ด๊ฐ 8*8ํฌ๊ธฐ๋ก ์๋ฅธ ๋ค์ ๋ค์ ์น ํด์ผํ๋ ์ ์ฌ๊ฐํ ๊ฐ์์ ์ต์๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ฒด์คํ์ ๊ฐ ์ ์ฌ๊ฐํ์ด ๊ฒ์ ๋๋ ํฐ์์ด๋ฉฐ, ๋ณ์ ๊ณต์ ํ๋ ๋ ๊ฐ์ ์ฌ๊ฐํ์ด ๊ฐ์ ์์ด ์๋ ๋ ์ด๋ค. ๋ฐ๋ผ์ ์ ์ ์์ ์ํ๋ฉด ์ฒด์คํ์ ์์ ํญ์ ๋ ๊ฐ์ง๊ฐ ๊ฐ๋ฅํ๋ฐ, ํ๋๋ ์ผ์ชฝ ์ ์ฝ๋๊ฐ ํฐ์์ธ ๊ฒ, ๊ฒ์ ์์ธ ๊ฒ ๋๊ฐ์ง์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N๊ณผ M์ด ์ฃผ์ด์ง๋ค. M๊ณผ N์ 8๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 50๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ ์ค์๋ ์ฒด์คํ์ ์ ์ํ๊ฐ ์ฃผ์ด์ง๋ค. B๋ ๊ฒ์ ์์ด๋ฉฐ, W๋ ํฐ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ง๋ฏผ์ด๊ฐ 8*8ํฌ๊ธฐ๋ก ์๋ฅธ ๋ค์ ๋ค์ ์น ํด์ผํ๋ ์ ์ฌ๊ฐํ ๊ฐ์์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ
8 8 WBWBWBWB BWBWBWBW WBWBWBWB BWBBBWBW WBWBWBWB BWBWBWBW WBWBWBWB BWBWBWBW |
์์ ์ถ๋ ฅ
1 |
๋ฌธ์ ํ์ด
์ฒด์คํ์ ๋ชจ์ต์ ํฐ์์ผ๋ก ์์ํ๋ ์ฒด์คํ๊ณผ, ๊ฒ์์์ผ๋ก ์์ํ๋ ์ฒด์คํ์ ๊ฒฝ์ฐ๋ฐ์ ์๋ค.
๊ทธ๋์ ๊ฐ ๊ฒฝ์ฐ๋ฅผ ๋ณ์๋ก ์ง์ ํด๋๊ณ ๊ฐ์์ง ์๋์ง ํ๋จํ๋ฉด ๋๋ค.
/* ๋ค์ ์น ํด์ผ ํ๋ ์ ์ฌ๊ฐํ์ ์ต์ ๊ฐ์ */
/* 2019-07-09 ์ฒด์คํ ๋ค์ ์น ํ๊ธฐ */
#include <iostream>
#include <vector>
using namespace std;
const int white[8][8] = {
{ 0,1,0,1,0,1,0,1 },
{ 1,0,1,0,1,0,1,0 },
{ 0,1,0,1,0,1,0,1 },
{ 1,0,1,0,1,0,1,0 },
{ 0,1,0,1,0,1,0,1 },
{ 1,0,1,0,1,0,1,0 },
{ 0,1,0,1,0,1,0,1 },
{ 1,0,1,0,1,0,1,0 }
};
const int black[8][8] = {
{ 1,0,1,0,1,0,1,0 },
{ 0,1,0,1,0,1,0,1 },
{ 1,0,1,0,1,0,1,0 },
{ 0,1,0,1,0,1,0,1 },
{ 1,0,1,0,1,0,1,0 },
{ 0,1,0,1,0,1,0,1 },
{ 1,0,1,0,1,0,1,0 },
{ 0,1,0,1,0,1,0,1 }
};
int small = 987654;
bool check(vector<vector<int> >board, int y, int x) {
int cnt = 0;
//๋ณด๋ํ์ ๋ฒ์ด๋๋๊ฐ?
if (y+7 >= board.size() || x+7 >= board[0].size()) {
return false;
}
int ny = y;
int nx = x;
for (int i = 0; i < 8; i++) {
nx = x;
for (int j = 0; j < 8; j++) {
if (white[i][j] != board[ny][nx]) cnt++;
if(nx!=board[0].size()-1) nx++;
}
if (ny != board.size()-1) ny++;
}
//cout << y <<" " << x <<" "<<cnt <<endl;
if (small > cnt) small = cnt;
ny = y;
cnt = 0;
for (int i = 0; i < 8; i++) {
nx = x;
for (int j = 0; j < 8; j++) {
if (black[i][j] != board[ny][nx]) cnt++;
if (nx != board[0].size()-1)nx++;
}
if (ny != board.size()-1)ny++;
}
//cout << y << " " << x << " " << cnt << endl;
if (small > cnt) small = cnt;
return true;
}
int main() {
int m, n;
char temp;
cin >> m >> n;
vector<vector<int> > board(m, vector<int>(n, 0));
//๋ณด๋ํ ๋ง๋ค๊ธฐ
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cin >> temp;
if (temp == 'B') board[i][j] = 1; // ๊ฒ์ ์นธ์ 1๋ก ์ ์ฅ
}
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
check(board, i, j);
}
}
cout << small;
}
๋ฐ๋ผ์ ์ง๋ฏผ์ด๋ 8*8ํฌ๊ธฐ์ ์ฒด์คํ์ผ๋ก ์๋ผ๋ธ ํ์ ๋ช ๊ฐ์ ์ ์ฌ๊ฐํ์ ๋ค์ ์น ํด์ผ ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค. ๋น์ฐํ 8*8ํฌ๊ธฐ๋ ์๋ฌด๋ฐ์๋ ๊ณจ๋ผ๋ ๋๋ค. |
m*n์ ์ฒด์คํ์ 8*8๋ก ์๋ผ๋ด๊ณ ๊ทธ ์ํ์์ ๋ช ๊ฐ์ ์ ์ฌ๊ฐํ์ ๋ค์ ์น ํ ๊ฒ์ธ์ง ํ๋จํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด์ค ํฌ๋ฌธ์ ์ด์ฉํด์ ๋ชจ๋ ์นธ์์ 8*8๋ก ์๋ผ๋ด๋ ์๋๋ฆฌ์ค๋ฅผ ๊ทธ๋ ธ๋ค.
๋ฐ๋ก check ํจ์์์ ์๋ผ๋ธ 8*8 ๋ณด๋ํ์ด ๋ฒ์๋ฅผ ๋ฒ์ด๋์ง ํ๋จํ๊ณ , ๋ช ๊ฐ์ ์ ์ฌ๊ฐํ์ ๋ค์ ์น ํด์ผ ํ๋์ง๋ ํ๋ณํ๋ค. ํฐ์์ผ๋ก ์์ํ๋ ์ฒด์คํ๊ณผ ๊ฒ์์์ผ๋ก ์์ํ๋ ์ฒด์คํ ๋ชจ๋๋ฅผ ๋น๊ตํด ๊ฐ์ฅ ์ ๊ฒ ์น ํ๋ ์๋ฅผ ์์๋ธ๋ค.