티스토리 뷰
#include <iostream>
using namespace std;
char arr[51][51];
int x, y;
bool check(int a,int b) {
if (x - a < 0)return false;
else if (y - b < 0)return false;
else return true;
}
int change(int a1, int b1) {
char w = 'W';
char b = 'B';
char c='W';
int min = 9999999;
int count = 0;
for (int i = a1; i < a1+8; i++) {
for (int j = b1; j < b1+8; j++) {
if (arr[i][j] == c) {
if (c == w)c = b;
else c = w;
}
else {
if (c == w)c = b;
else c = w;
count++;
}
}
if (c == w)c = b;
else c = w;
}
if (min > count)min = count;
c = 'B';
count = 0;
for (int i = a1; i < a1+8; i++) {
for (int j = b1; j < b1+8; j++) {
if (arr[i][j] == c) {
if (c == w)c = b;
else c = w;
}
else {
if (c == w)c = b;
else c = w;
count++;
}
}
if (c == w)c = b;
else c = w;
}
if (min > count)min = count;
return min;
}
int main() {
int min=99999999;
cin >> x >> y;
for (int i = 1; i <= x; i++) {
for (int j = 1; j <= y; j++) {
cin >> arr[i][j];
}
}
//현재좌표가 체스판의 왼쪽위라고 생각하고 체스판을 잘라낼수있는지 검증하는함수
for (int i = 1; i <= x; i++) {
for (int j = 1; j <= y; j++) {
if (check(i, j)) {
int mem = change(i, j);
if (mem < min)min = mem;
}
}
}
//검증에 통과되면 배열을 W또는B로 시작했을때 바꿔야하는 칸의 수를 저장한다
cout << min;
//제일작은값 출력
}
브루트 포스를 이용하여 모든 경우의 수를 헤아려 보면 된다.
코드가 복잡해 질수록 함수를 따로 정의하여 쓰는게 간결하다고 생각된다
'PS' 카테고리의 다른 글
| 2609 최대공약수와 최소공배수 (0) | 2021.01.09 |
|---|---|
| 1920 수 찾기 (0) | 2021.01.09 |
| 1181 단어 정렬 (0) | 2021.01.09 |
| 1550 16진수 (0) | 2021.01.08 |
| 10757 큰수 A+B (0) | 2021.01.08 |
- Total
- Today
- Yesterday
- 소셜네트워킹어플리케이션
- 1918
- 골목길C++
- C++
- 어린왕자 C++
- 7511
- 스택
- 1738
- 백준
- 벨만-포드
- 벨만포드
- 6539
- 6018
- 1004
- 11657
- 중위 표기식 후위 표기식으로 변환
- 상범빌딩
- 타임머신
- tea time
- 후위 표기식
- 골목길
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
