BOJ

백준 1018 - 체스판 다시 칠하기

yanJuicy 2020. 4. 12. 01:46
반응형

문제

 

https://www.acmicpc.net/problem/1018

 

1018번: 체스판 다시 칠하기

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

www.acmicpc.net

 

 

풀이

 

8*8 크기의 체스판을 두 개를 준비한다. W로 시작하는 체스판과 B로 시작하는 체스판을 준비한다.

이 두 체스판을 M*N 크기의 보드에 번갈아 가면서 비교해 가면 된다.

 

1. M*N 보드의 왼쪽 끝(0,0)을 기준으로 8*8 크기 만큼 두 개의 체스판과 비교를 한다.

2. 왼쪽 끝을 (0,1), (0,2), ..., (1,0), (1,1), ... 순으로 가능한 범위 내에서 바꿔준 후 8*8 크기 만큼 두 개의 체스판과 비교를 한다.  

3. 비교할 때 마다 비교 횟수를 구한 후 최소값과 비교한다.

 

 

코드

 

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
62
63
64
65
66
#include <iostream>
#include <string>
#include <algorithm>
 
using namespace std;
 
string board[50];
int N, M;
int result = 987654321;
 
string c1[8= { "WBWBWBWB"
                "BWBWBWBW",
                "WBWBWBWB",
                "BWBWBWBW",
                "WBWBWBWB",
                "BWBWBWBW",
                "WBWBWBWB",
                "BWBWBWBW"};
                
string c2[8= { "BWBWBWBW",
                "WBWBWBWB",
                "BWBWBWBW",
                "WBWBWBWB",
                "BWBWBWBW",
                "WBWBWBWB",
                "BWBWBWBW",
                "WBWBWBWB"};
 
int check1(int x, int y)
{
    int diff = 0;
    for (int i=x; i<x+8; i++)
        for (int j=y; j<y+8; j++)
            if (board[i][j] != c1[i-x][j-y])
                diff++;
    return diff;
}
 
int check2(int x, int y)
{
    int diff = 0;
    for (int i=x; i<x+8; i++)
        for (int j=y; j<y+8; j++)
            if (board[i][j] != c2[i-x][j-y])
                diff++;
    return diff;
}
 
int main()
{
    cin.tie(0);
    ios::sync_with_stdio(0);
 
    cin >> N >> M;
 
    for (int i=0; i<N; i++)
        cin >> board[i];
 
    for (int i=0; i<=N-8; i++)
        for (int j=0; j<=M-8; j++)
            result = min(result, min(check1(i, j), check2(i,j)));  
       
    cout << result;
 
    return 0;
}
cs
반응형

'BOJ' 카테고리의 다른 글

백준 1517 - 버블 소트  (0) 2020.04.14
백준 3190 - 뱀  (0) 2020.04.13
백준 13335 - 트럭  (0) 2020.04.09
백준 2447 - 별찍기 - 10  (0) 2020.04.06
백준 14503 - 로봇 청소기  (0) 2020.04.03