코딩공작소
[백준]체스판다시칠하기 본문
https://www.acmicpc.net/problem/1018
1018번: 체스판 다시 칠하기
첫째 줄에 N과 M이 주어진다. M과 N은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개 줄에는 체스판의 색 상태가 주어진다. B는 검정색이며, W는 흰색이다.
www.acmicpc.net
흠.. 간만에 적응 안되는 쉬운문제였다.
시뮬?? 그리디?? 그냥 세우면 됐다.
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | #include <iostream> using namespace std; /* 1.8x8의 격자판을 만들어야한다. 2.8x8을 완전 탐색으로 선택해서 왼쪽 위를 기준으로 몇개를 칠해야되는지 전부 따진다. */ char white[8][8] = { {'W','B','W','B','W','B','W','B'}, {'B','W','B','W','B','W','B','W'}, {'W','B','W','B','W','B','W','B'}, {'B','W','B','W','B','W','B','W'}, {'W','B','W','B','W','B','W','B'}, {'B','W','B','W','B','W','B','W'}, {'W','B','W','B','W','B','W','B'}, {'B','W','B','W','B','W','B','W'}, }; char black[8][8] = { {'B','W','B','W','B','W','B','W'}, {'W','B','W','B','W','B','W','B'}, {'B','W','B','W','B','W','B','W'}, {'W','B','W','B','W','B','W','B'}, {'B','W','B','W','B','W','B','W'}, {'W','B','W','B','W','B','W','B'}, {'B','W','B','W','B','W','B','W'}, {'W','B','W','B','W','B','W','B'} }; char map[50][50]; int N, M; int ans = 1e9; int main() { cin >> N >> M; for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { cin >> map[i][j]; } } for (int r = 0; r <= N-8; r++) { for (int c = 0; c <= M-8; c++) { //각 점들마다 int cnt1 = 0, cnt2 = 0; for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { if (map[i + r][j + c] != white[i][j]) cnt1++; if (map[i + r][j + c] != black[i][j]) cnt2++; } } //printf("white : %d black : %d\n", cnt1, cnt2); int tmp; if (cnt2 >= cnt1) tmp = cnt1; else tmp = cnt2; if (ans >= tmp) ans = tmp; } } printf("%d\n", ans); return 0; } | cs |
'알고리즘 > 그리디&완탐' 카테고리의 다른 글
[백트래킹]조합,순열,중복조합,중복순열 (0) | 2019.08.11 |
---|---|
[백준]Z(분할정복)다시풀어보자 (0) | 2019.08.08 |
[백준]색종이 붙이기 (1) | 2019.08.06 |
[백준]스타트링크(두번째) (0) | 2019.08.02 |
[백준]감시 (0) | 2019.08.02 |