https://www.acmicpc.net/problem/1018
와 문제 이해를 못해서 하루종일 헤맨 문제...
그냥 어지간히 안풀린다 싶으면 문제 이해를 위해서라도 검색을 해보자 ㅎ
생각
1. 비교를 할 WB / BW 체스판을 미리 만들어 두고 비교를 하자
2. 여기서 키포인트는 한 번만 비교를 하는게 아니라 움직여가면서 비교를 하는 것!
#include <iostream>
#include <algorithm>
using namespace std;
string WB[8] =
{
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW"};
string BW[8] =
{
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB"};
int main()
{
int N, M, cnt_wb = 0, cnt_bw = 0;
cin >> N >> M;
char str[N][M];
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
cin >> str[i][j];
}
}
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
if (str[i][j] != WB[i][j])
cnt_wb++;
if (str[i][j] != BW[i][j])
cnt_bw++;
}
}
int result = min(cnt_wb, cnt_bw);
if (result > 64)
result = 64;
cout << result;
}
이 코드는 한 번만 비교를 하도록 한 것이고 입력받은 체스판에서 가능한 모든 8x8 크기의 부분 체스판에 대해 비교해야함! -> 각 행/열 한 번씩 for문을 추가해주면 됨
최종 코드
#include <iostream>
using namespace std;
string WB[8] =
{
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW"};
string BW[8] =
{
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB"};
int main()
{
int N, M, result = 64;
cin >> N >> M;
char str[N][M];
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
cin >> str[i][j];
}
}
for (int i = 0; i <= N - 8; i++)
{
for (int j = 0; j <= M - 8; j++)
{
int cnt_wb = 0, cnt_bw = 0; // 반복 여러번 돌려야 하니까 매번 0으로 초기화!!
for (int x = 0; x < 8; x++)
{
for (int y = 0; y < 8; y++)
{
if (str[i + x][j + y] != WB[x][y])
cnt_wb++;
if (str[i + x][j + y] != BW[x][y])
cnt_bw++;
}
}
result = min(result, min(cnt_wb, cnt_bw)); // 마찬가지로 끝날 때마다 초기화!!
}
}
cout << result;
return 0;
}
+ 그냥 코드 깔끔하게 쓰는 법
int result = min(cnt_wb, cnt_bw);
if (result > 64)
result = 64;
if문으로 비교를 했는데 그냥 min을 중첩시키면 더 간단할 듯!
result = min(result, min(cnt_wb, cnt_bw));
728x90
'백준' 카테고리의 다른 글
백준 2231 C++ (2) | 2023.11.22 |
---|---|
백준 7568 C++ (2) | 2023.11.22 |
백준 9093 C++ (1) | 2023.11.16 |
백준 1874번 C++ (1) | 2023.11.15 |
백준 2805번 C++ (0) | 2023.11.15 |