https://www.acmicpc.net/problem/1018
1018번: 체스판 다시 칠하기
첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.
www.acmicpc.net
해석 및 팁
이 문제는 다시 칠해야 하는 정사각형 개수의 최솟값을 구하는 문제입니다. 먼저 배열에 체스판을 입력받은 후 w보드와 비교해서 다른 경우 count++을 해줍니다 b보드인 경우는 64-(count) 이므로 두 개 중 작은 값과 최솟값을 비교하여 가장 최소일 때의 값을 출력하면 됩니다.
Java 코드
import java.util.Scanner;
public class Main {
static char arr[][];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int min = 64;
arr = new char[n][m];
for(int i = 0; i < n; i++) {
String str = sc.next();
for(int j = 0; j < m; j++) {
arr[i][j] = str.charAt(j);
}
}
for(int i = 0; i < n - 7; i++) {
for(int j = 0; j < m - 7; j++) {
min = Math.min(min, check(i, j));
}
}
System.out.println(min);
}
public static int check(int x, int y) {
int count = 0;
for(int i = x; i < x + 8; i++) {
for(int j = y; j < y + 8; j++) {
if((i + j) % 2 == 0) { //W보드일때 인덱스 합이 짝수이면 W이다
if(arr[i][j] == 'B') count++; //B인경우에는 W로 바꿔주어야 하므로 count++
}
else if((i + j) % 2 == 1) { //W보드일때 인덱스 합이 홀수이면 B이다
if(arr[i][j] == 'W') count++; //W인경우에는 B로 바꿔주어야 하므로 count++
}
}
}
count = Math.min(count, 64-count);
return(count);
}
}
'백준' 카테고리의 다른 글
백준 10845 큐(Java) (0) | 2023.01.25 |
---|---|
백준 10773 제로(Java) (0) | 2023.01.25 |
백준 11047 동전 0(Java) (2) | 2023.01.25 |
백준 11399 ATM(Java) (1) | 2023.01.25 |
백준 10828 스택(Java) (1) | 2023.01.25 |