본문 바로가기
문제 풀이/백준(BOJ)

[C] 백준 1018번 : 체스판 다시 칠하기

by 희조당 2021. 4. 11.
728x90

www.acmicpc.net/problem/1018

 

1018번: 체스판 다시 칠하기

첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.

www.acmicpc.net


문제 접근

 1. 8x8 크기를 찾기 위해 입력받은 값에서 7만큼을 뺀 횟수만큼 반복한다(가로, 세로 모두)

 2. 8x8 크기이기 때문에 시작하는 인덱스부터 8회 반복한다.

 3. 체스판의 시작이 검정이라고 가정하면 인덱스의 합이 짝수은 검정이고 홀수는 흰색

 4. 인덱스와 해당 칸(배열)의 색을 비교해서 맞지 않으면 cnt를 올린다

 5. 흰색 count와 검은색 count의 값을 비교해서 최소값을 찾는다

 6. 계속 값을 비교해서 최솟값을 출력한다.

느낀점

벽을 느낀 문제였다.

코드

#include <stdio.h>

int main() {
	char board[50][50] = { 0, };
	int n, m; // m은 가로, n은 세로
	int min = 64;
	scanf("%d %d", &n, &m);
	for (int i = 0; i < n;i++) {
		scanf("%s", &board[i]);
	}
	for (int i = 0;i < n - 7;i++) {
		for (int j = 0; j < m - 7;j++) {
			int cnt_b = 0, cnt_w = 0;
			for (int x = i;x < i + 8;x++) {
				for (int y = j;y < j + 8;y++) {
					if ((x + y) % 2 == 0) {
						if (board[x][y] == 'W') cnt_b++;
						else cnt_w++;
					}
					else {
						if (board[x][y] == 'W') cnt_w++;
						else cnt_b++;
					}
				}
			}
			min = min > cnt_b ? cnt_b : min;
			min = min > cnt_w ? cnt_w : min;
		}
	}
	printf("%d", min);

	return 0;
}

'문제 풀이 > 백준(BOJ)' 카테고리의 다른 글

[C] 백준 2750번 : 수 정렬하기  (0) 2021.04.12
[C] 백준 1436번 : 영화감독 숌  (0) 2021.04.12
[C] 백준 7568번 : 덩치  (0) 2021.04.08
[C] 백준 2231번 : 분해합  (0) 2021.04.06
[C] 백준 2798번 : 블랙잭  (0) 2021.04.03

댓글