https://www.acmicpc.net/problem/1018
<풀이>
- 4중 for문을 돌며...
- 맨 위 왼쪽이 B로 시작하는지, W로 시작하는지 두가지 상황으로 나누어서 각각의 경우에 다른 값이 있는 개수를 각각 저장한다. -> 최소값을 비교
- 왼쪽 위가 B로 시작하는 경우
BWBWBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB 와 같은 형태
- 왼쪽 위가 W로 시작하는 경우
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBWBWBW 와 같은 형태
- 짝수행일 때와 홀수행일 때를 비교하여 탐색한다.
- 짝수행인 경우 -
- 왼쪽 위가 B로 시작하는 경우는 : BWBW가 될테니 짝수열: B, 홀수열:W가 있어야한다.
- 왼쪽 위가 W로 시작하는 경우는 : WBWB가 될테니 짝수열:W, 홀수열:B가 있어야한다.
- 홀수행인 경우 -
- 왼쪽 위가 B로 시작하는 경우는 홀수행은 WBWB가 될테니 짝수열:W, 홀수열:B가 있어야한다.
- 왼쪽 위가 W로 시작하는 경우는 : BWBW가 될테니 짝수열: B, 홀수열:W가 있어야한다.
- 짝수행인 경우 -
package BruteForce;
import java.io.*;
import java.util.StringTokenizer;
public class Main_1018 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int M = Integer.parseInt(st.nextToken());
int N = Integer.parseInt(st.nextToken());
char [][] board = new char[M][N];
int min = Integer.MAX_VALUE;
for (int i = 0; i < M; i++) {
String s = br.readLine();
for (int j = 0; j < N; j++) {
board[i][j] = s.charAt(j);
}
}
// 8개 어떻게 자를 것인지
// 어떻게 교차해서 칠할 것인지 - 개수 세기기
// 홀, 짝
for (int i = 0; i < M-7; i++) {
for (int j = 0; j < N-7; j++) {
int evenB = 0; // 왼쪽 위 B 로 시작
int evenW = 0; // 왼쪽 위 W 로 시작
for (int k = i; k < i+8; k++) {
for (int l = j; l < j+8; l++) {
// if(k<M && l<N){
if(k % 2 == 0){ //짝수 행
// 왼쪽 위 B 로 시작 -> 짝수행에서 짝수열:B,홀수열:W
if((l%2==0 && board[k][l] != 'B') || (l%2!=0 && board[k][l] != 'W')){
evenB++;
}
// 왼쪽 위 W 로 시작 -> 짝수행에서 짝수열:W,홀수열:B
if((l%2==0 && board[k][l] != 'W') || (l%2!=0 && board[k][l] != 'B')){
evenW++;
}
}
if(k % 2 != 0){ //홀수 행
// 왼쪽 위 B 로 시작 -> 홀수 행에서 짝수열:W,홀수열:B
if((l%2==0 && board[k][l] != 'W') || (l%2!=0 && board[k][l] != 'B')){
evenB++;
}
// 왼쪽 위 W 로 시작 -> 홀수 행에서 짝수열:B,홀수열:W
if((l%2==0 && board[k][l] != 'B') || (l%2!=0 && board[k][l] != 'W')){
evenW++;
}
}
// }
}
}
evenB = evenB < evenW ? evenB : evenW;
min = min < evenB ? min : evenB;
}
}
System.out.println(min);
}
}
'공부 > 알고리즘' 카테고리의 다른 글
[백준]17413_단어 뒤집기 2_Java 풀이 (0) | 2023.02.04 |
---|---|
[프로그래머스]42576_완주하지 못한 선수_Java 풀이 2가지 (0) | 2023.01.25 |
[백준]2751_수 정렬하기2_Java풀이(Collections.sort, Counting Sort) (0) | 2023.01.10 |
[프로그래머스]43162_네트워크_JAVA 풀이_DFS (0) | 2022.11.30 |
[프로그래머스]주차 요금 계산_JAVA (0) | 2022.06.05 |
댓글