체스판을 칠하는데
"최소 개수를 구하는" 이라 함은
WBWB
BWBW
WBWB
BWBW
인지 (왼쪽 위가 W인지)
BWBW
WBWB
BWBW
WBWB
인지 (왼쪽 위가 B인지)
둘중 하나를 고르고
몇 칸이 차이나는지 고르라는 뜻이죠?
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int m = scan.nextInt();
int min=64;
String[] arr = new String[n];
char[][] chess = new char[n][m];
scan.nextLine();
for(int i=0;i<n;i++) {
arr[i]=scan.nextLine();
for(int j=0;j<m;j++) {
chess[i][j]=arr[i].charAt(j);
}
}
for(int i=0;i<=(n-8);i++) {
for(int j=0;j<=(m-8);j++) {
if(functionB(chess,i,j)<min) {
min = functionB(chess,i,j);
}
if(functionW(chess,i,j)<min) {
min = functionW(chess,i,j);
}
}
}
System.out.println(min);
}
public static int functionB(char[][] c,int i,int j) {
int count =0;
for(int a=0;a<8;a++) {
for(int b=0;b<8;b++) {
if((i+a+j+b)%2==1&&c[i+a][j+b]=='B') {
count+=1;
}
if((i+a+j+b)%2==0&&c[i+a][j+b]=='W') {
count+=1;
}
}
}
return 64-count;
}
public static int functionW(char[][] c,int i,int j) {
int count =0;
for(int a=0;a<8;a++) {
for(int b=0;b<8;b++) {
if((i+a+j+b)%2==1&&c[i+a][j+b]=='W') {
count+=1;
}
if((i+a+j+b)%2==0&&c[i+a][j+b]=='B') {
count+=1;
}
}
}
return 64-count;
}
}
functionB와 functionW를 이용해서
왼쪽위가 B인 경우, W인 경우를 둘다 구해서
둘중 작은 값을 구하도록 코딩했습니다
char[][] chess 는 체스판을 구현한 코드입니다
리스트( [] )를 두번 반복하면
행렬(matrix)형식으로 사용할 수 있습니다
N과M의 최소값이 8이기에
체스판은 최소 64칸을 가지고 있기에
int min = 64로 했습니다
'백준 문제풀기 > JAVA' 카테고리의 다른 글
[백준 1085 JAVA 자바] 직사각형에서 탈출 (0) | 2023.07.29 |
---|---|
[백준 1037 JAVA 자바] 약수 (0) | 2023.07.29 |
[백준 1010 JAVA 자바] 다리 놓기 (0) | 2023.07.29 |
[백준 1008 JAVA 자바] A/B (0) | 2023.07.29 |
[백준 1004 JAVA 자바] 어린왕자 (0) | 2023.07.29 |