Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
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
Archives
Today
Total
관리 메뉴

최's 먹공로그

백준1018_체스판 다시 칠하기 본문

APS

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

ChoiSH313 2019. 2. 3. 14:23

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package backjoon;
 
import java.util.Scanner;
 
public class b1018 {
 
    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        
        int N = sc.nextInt(); // 행
        int M = sc.nextInt(); // 열
        char[][] arr = new char[N][M];
        String[] array = new String[N]; 
        
        // String으로 입력해서 한글자씩 char형태로
        for(int i = 0; i < N; i++) {
            array[i] = sc.next();
        }
        for(int i = 0; i < N; i++) {
            for(int j = 0; j < M; j++) {
                arr[i][j] = array[i].charAt(j);
            }
        }
        
        int cnt_b = 0, cnt_w = 0// 뒤짚어야 될 돌 카운트
        int min_b = 999, min_w = 999, min_result = 0// 다 뒤짚고 최소값 저장
        
        // (0,0)에 있는 돌이 블랙일때의 최소값
        for(int i = 0; i <= N - 8; i++) { // 8*8로 자름
            for(int j = 0; j <= M - 8; j++) { // 8*8로 자름
                cnt_b = 0;
                
                for(int x = i; x < i + 8; x++) {
                    for(int y = j; y < j + 8; y++) {
                        if((x%2==0 && y%2==0|| (x%2!=0 && y%2!=0)) { // (0,0)이 블랙일때 인덱스x,y가 둘다 짝수이거나 홀수일때는 블랙이어야함 그렇지 않으면 카운트
                            if(arr[x][y] != 'B')
                                cnt_b++;
                            continue;
                        }
                        if((x%2==0 && y%2!=0|| (x%2!=0 && y%2==0)) { // (0,0)이 블랙일때 인덱스x,y가 한개는 짝수 한개는 홀수 일때는 화이트이어야함 그렇지 않으면 카운트
                            if(arr[x][y] != 'W')
                                cnt_b++;
                            continue;
                        }
                    }
                }
                if(min_b > cnt_b)
                    min_b = cnt_b; // (0,0)이 블랙이라는 가정하에 최소값 저장
            }
        }
        
        // (0,0)에 있는 돌이 화이트 일때의 최소값
        for(int i = 0; i <= N - 8; i++) { // 8*8로 자름
            for(int j = 0; j <= M - 8; j++) { // 8*8로 자름
                cnt_w = 0;
                
                for(int x = i; x < i + 8; x++) {
                    for(int y = j; y < j + 8; y++) {
                        if((x%2==0 && y%2==0|| (x%2!=0 && y%2!=0)) { // (0,0)이 화이트일때 인덱스x,y가 둘다 짝수이거나 홀수일때는 화이트이어야함 그렇지 않으면 카운트
                            if(arr[x][y] != 'W')
                                cnt_w++;
                            continue;
                        }
                        if((x%2==0 && y%2!=0|| (x%2!=0 && y%2==0)) { // (0,0)이 화이트일때 인덱스x,y가 한개는 짝수 한개는 홀수 일때는 블랙이어야함 그렇지 않으면 카운트
                            if(arr[x][y] != 'B')
                                cnt_w++;
                            continue;
                        }
                    }
                }
                if(min_w > cnt_w) {
                    min_w = cnt_w; // (0,0)이 화이트라는 가정하에 최소값 저장
                }
            }
        }
        
        min_result = (min_b < min_w) ? min_b:min_w; // (0,0)블랙일때의 최소값과 화이트일때의 최소값을 비교해서 둘 중 더 작은 값을 저장
        System.out.println(min_result);
        
    }// end of main
}
 
cs

'APS' 카테고리의 다른 글

SW expert Academy 5431_민석이의 과제 체크하기  (0) 2019.02.03
백준10026_적록색약  (0) 2019.02.03
백준2667_단지번호붙이기  (0) 2019.02.03
백준1182_부분집합의 합  (0) 2019.02.03
알고리즘_경우의수 부분집합  (0) 2019.01.17