브루트포스 문제로 8*8 크기씩 계속 비교해가며 다시 칠해야할 갯수의 최솟값을 구해야합니다.
cnt1 => 맨 왼쪽 위 칸이 B로 칠해질 경우
cnt2 => 맨 왼쪽 위 칸이 W로 칠해질 경우
cnt1의 경우에는 i가 짝수일 때 BWBWBWBW, 홀수일 때 WBWBWBWB를 만들어야 합니다.
cnt2의 경우에는 i가 짝수일 때 WBWBWBWB, 홀수일 때 BWBWBWBW를 만들어야 합니다.
각 인덱스에서 다른색이 칠해져있으면 해당cnt를 증가시켜줍니다.
이 과정을 8*8 크기만큼 반복하여 최솟값을 출력합니다.
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
|
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer st;
static char ch[][];
static int N, M, ans = 2500;
static void func(int x, int y) {
int cnt1 = 0;
int cnt2 = 0;
for (int i = x; i < x + 8; i++) {
for (int j = y; j < y + 8; j++) {
if (i % 2 == 0) {
if (j % 2 == 0) {
if (ch[i][j] == 'B')
cnt2++;
else
cnt1++;
} else {
if (ch[i][j] == 'B')
cnt1++;
else
cnt2++;
}
} else {
if (j % 2 == 0) {
if (ch[i][j] == 'B')
cnt1++;
else
cnt2++;
} else {
if (ch[i][j] == 'B')
cnt2++;
else
cnt1++;
}
}
}
}
ans = Math.min(ans, Math.min(cnt1, cnt2));
}
static void solve() {
for (int i = 0; i <= N - 8; i++) {
for (int j = 0; j <= M - 8; j++) {
func(i, j);
}
}
System.out.println(ans);
}
static void input() throws Exception {
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
ch = new char[N][M];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
ch[i] = st.nextToken().toCharArray();
}
}
public static void main(String[] args) throws Exception {
input();
solve();
}
}
|
cs |
'algorithm > Bruteforce' 카테고리의 다른 글
boj 17281 ⚾ (0) | 2021.02.16 |
---|---|
boj 3040 백설 공주와 일곱 난쟁이 (0) | 2021.02.15 |
boj 2961 도영이가 만든 맛있는 음식 (0) | 2021.02.15 |
boj 2422 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 (0) | 2021.01.29 |
boj 15686 치킨 배달 (0) | 2021.01.22 |