728x90
문제
https://www.acmicpc.net/problem/1018
풀이 코드
- 보드를 8*8로 나눌 수 있는 모든 경우의 수를 구하며 각 경우의 수마다 첫번째 칸이 검은칸부터 시작하는 경우, 흰칸부터 시작하는 경우의 다시 칠해야되는 칸의 개수를 구한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static char[][] board;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()); //세로
int m = Integer.parseInt(st.nextToken()); //가로
board = new char[n][m];
int min = Integer.MAX_VALUE;
for (int i = 0; i < n; i++) {
String s = br.readLine();
board[i] = s.toCharArray();
}
for (int i = 0; i < n - 7; i++) {
for (int j = 0; j < m - 7; j++) {
//첫번째 칸이 검은 칸부터 시작하는 경우
min = Math.min(min, count(i, j, true));
//첫번째 칸이 흰색 칸부터 시작하는 경우
min = Math.min(min, count(i, j, false));
}
}
System.out.println(min);
}
/**
* @param x,y 체스판 시작 위치
* @param startIsBlack 체스판 시작 칸이 검은색인지
* @return 다시 칠해야되는 칸의 개수
*/
public static int count(int x, int y, boolean startIsBlack) {
int count = 0;
boolean isBlack = startIsBlack;
for (int i = x; i < x + 8; i++) {
for (int j = y; j < y + 8; j++) {
if (isBlack && board[i][j] == 'W') {
count++;
}
if (!isBlack && board[i][j] == 'B') {
count++;
}
isBlack = !isBlack;
}
isBlack = !isBlack;
}
return count;
}
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[알고리즘/백준] 1929 소수 구하기(자바, 에라토스테네스의 체) (0) | 2021.09.24 |
---|---|
[알고리즘/백준] 1920 수 찾기(자바, 이진탐색, BinarySearch) (0) | 2021.09.23 |
[알고리즘/백준] 1259 팰린드롬 수(자바) (0) | 2021.09.21 |
[알고리즘/백준] 1181 단어 정렬(자바) (0) | 2021.09.20 |
[알고리즘/백준] 1085 직사각형에서 탈출(자바) (0) | 2021.09.20 |
댓글