728x90
문제
https://www.acmicpc.net/problem/1018
풀이
왼쪽 위가 흰색으로 시작하는 체스판, 검은색으로 시작하는 체스판.
static char[][] answer1 = new char[][]{
{'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'}
};
static char[][] answer2 = new char[][]{
{'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'}
};
이렇게 답이 2개로 정해져 있어서 그 2개의 정답을 static으로 선언하여 할당해주고 반복문을 돌면서 답과 비교하는 방식으로 풀었음
정답은 8x8 크기의 체스판이므로 for문으로 반복할 때의 인덱싱만 주의해주면 쉽게 풀 수 있다고 생각함
코드
// 1018번 체스판 다시 칠하기
// https://www.acmicpc.net/problem/1018
package BAEKJOON;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Num1018_체스판다시칠하기 {
static int N, M;
static char[][] answer1 = new char[][]{
{'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'}
};
static char[][] answer2 = new char[][]{
{'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'}
};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
char[][] map = new char[N][M];
for (int i = 0; i < N; i++) {
String str = br.readLine();
for (int j = 0; j < M; j++) {
map[i][j] = str.charAt(j);
}
}
int min = Integer.MAX_VALUE;
int count = 0;
for (int i = 0; i < N - 7; i++) {
for (int j = 0; j < M - 7; j++) {
count = solution(map, i, j);
min = Math.min(min, count);
}
}
System.out.println(min);
}
public static int solution(char[][] map, int y, int x) {
int count1 = 0;
int count2 = 0;
for (int i = y; i < y + 8; i++) {
for (int j = x; j < x + 8; j++) {
if (map[i][j] != answer1[i - y][j - x]) {
count1++;
}
if (map[i][j] != answer2[i - y][j - x]) {
count2++;
}
}
}
return Math.min(count1, count2);
}
}
728x90