자바/백준
[백준 1018] 체스판 다시 칠하기
슈슈버거
2022. 11. 28. 15:44
문제
https://www.acmicpc.net/problem/1018
1018번: 체스판 다시 칠하기
첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.
www.acmicpc.net
내가 작성한 코드
import java.io.*;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class qor1018 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int sero = Integer.parseInt(st.nextToken());
int garo = Integer.parseInt(st.nextToken());
String black = "BWBWBWBW";
String white = "WBWBWBWB";
ArrayList<String> chess = new ArrayList<>();
for(int i = 0; i<sero; i++){
chess.add(br.readLine());
}
int bmin = 64;
int wmin = 64;
// 첫 줄이 black인 경우
int si = 0;
int gi = 0;
while(si<=sero-8){
gi = 0;
while(gi<=garo-8){
int count = 0;
for(int i = 0; i<8; i++){
String sen = chess.get(si+i);
if(i%2==0){
for(int j = 0; j<8; j++){
if(sen.charAt(gi+j) != black.charAt(j)){
count++;
}
}
}
else{
for(int j = 0; j<8; j++){
if(sen.charAt(gi+j) != white.charAt(j)){
count++;
}
}
}
}
if(count<bmin){
bmin = count;
}
gi++;
}
si++;
}
// 첫 줄이 white인 경우
si = 0;
gi = 0;
while(si<=sero-8){
gi = 0;
while(gi<=garo-8){
int count = 0;
for(int i = 0; i<8; i++){
String sen = chess.get(si+i);
if(i%2==0){
for(int j = 0; j<8; j++){
if(sen.charAt(gi+j) != white.charAt(j)){
count++;
}
}
}
else{
for(int j = 0; j<8; j++){
if(sen.charAt(gi+j) != black.charAt(j)){
count++;
}
}
}
}
if(count<wmin){
wmin = count;
}
gi++;
}
si++;
}
if(bmin<wmin){
bw.write(bmin+"");
}
else{
bw.write(wmin+"");
}
bw.close();
}
}
어휴야 길다