https://www.acmicpc.net/problem/1018
1018번: 체스판 다시 칠하기
첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.
www.acmicpc.net
해결 방법
네 가지 경우가 있다.
- (0,0) 이 B로 시작하고 현재 인덱스의 원소가 B인경우
- (0,0) 이 B로 시작하고 현재 인덱스의 원소가 W인경우
- (0,0) 이 W로 시작하고 현재 인덱스가 B인경우
- (0,0) 이 W로 시작하고 현재 인덱스가 W인경우
이 네 가지 경우를 잘 생각해서 전부 세어주면 된다. Climits 헤더의 INT_MAX 를 사용하여 min 변수의 초기값을 설정해 주었다.
#include <iostream>
#include <stack>
#include <string>
#include <climits>
using namespace std;
int main()
{
int N, M;
char chess[50][50];
cin >> N >> M;
char input;
for(int y = 0 ; y < N ; y++)
{
for(int x = 0 ; x < M; x++)
{
cin >> input;
chess[y][x] = input;
}
}
int min = INT_MAX;
for(int y = 0 ; y < N; y++)
{
for(int x = 0 ; x < M; x++)
{
if(y > N-8 || x > M-8)
continue;
int cnt1 = 0, cnt2 = 0, cnt3 = 0, cnt4 = 0;
int sum = 0;
for(int Y = y; Y < y + 8; Y++)
{
for(int X = x; X < x + 8; X++)
{
if((((Y + X) % 2) == 1 ) && chess[Y][X] == 'W')
cnt1++;
if((((Y + X) % 2) == 0 ) && chess[Y][X] == 'B')
cnt2++;
if((((Y + X) % 2) == 1 ) && chess[Y][X] == 'B')
cnt3++;
if((((Y + X) % 2) == 0 ) && chess[Y][X] == 'W')
cnt4++;
}
}
sum = cnt1 + cnt2 < cnt3 + cnt4 ? cnt1+cnt2 : cnt3+ cnt4;
if (sum < min)
min = sum;
}
}
cout << min;
return 0;
}
'프로그래밍 공부 > 백준 (C++)' 카테고리의 다른 글
[C++/백준 10989번] 수 정렬하기 3 (카운팅 정렬) (0) | 2023.08.07 |
---|---|
[C++/백준 2751번] 수 정렬하기 2 (0) | 2023.08.07 |
[C++/백준 19532번] 수학은 비대면 강의입니다. (0) | 2023.08.03 |
[C++/백준 2231번] 분해합 (0) | 2023.08.03 |
[C++/백준 2745번] 진법 변환 (0) | 2023.07.27 |