https://www.acmicpc.net/problem/1018
문제가 이해 안 됐었는데 그냥 모든 경우의 수가 필요한 문제였다.ㅡㅡ
가로가 13, 세로가 10 이라고 가정하면
가로는 0~7, 1~8, 2~9, 3~10, 4~11, 5~12, 6~13
세로는 0~7, 1~8, 2~9, 3~10
만큼 이동하면서 계산해야한다.
for(int i = 0; i < N - 7; i++){
for(int j = 0; j < M - 7; j++){
minCount = Math.min(checkBoard(i,j), minCount);
}
}
이후 checkBoard 메서드에서 색칠해야하는 개수를 세준다.
public static int checkBoard(int x, int y){
String[] boardA = {"WBWBWBWB", "BWBWBWBW"};
int countA = 0;
int countB = 0;
for(int i = x; i < x+8; i++){
for(int j = y; j < y+8; j++){
if(chess[i][j] != boardA[i%2].charAt(j-y)){
countA++;
}else{
countB++;
}
}
}
return Math.min(countA, countB);
}
전체코드
import java.util.*;
import java.io.*;
class Main{
static int minCount = Integer.MAX_VALUE;
static char[][] chess;
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());
chess = new char[N][M];
for(int i = 0; i < N; i++){
chess[i] = br.readLine().toCharArray();
}
for(int i = 0; i < N - 7; i++){
for(int j = 0; j < M - 7; j++){
minCount = Math.min(checkBoard(i,j), minCount);
}
}
System.out.println(minCount);
}
public static int checkBoard(int x, int y){
String[] boardA = {"WBWBWBWB", "BWBWBWBW"};
int countA = 0;
int countB = 0;
for(int i = x; i < x+8; i++){
for(int j = y; j < y+8; j++){
if(chess[i][j] != boardA[i%2].charAt(j-y)){
countA++;
}else{
countB++;
}
}
}
return Math.min(countA, countB);
}
}
'Algorithm' 카테고리의 다른 글
[Algorithm] 99클럽 코테 스터디 13일차 TIL | 백준_부등호(2529번) (0) | 2025.02.05 |
---|---|
[Algorithm] 99클럽 코테 스터디 12일차 TIL | 백준_숫자 정사각형(1051번) (4) | 2025.02.04 |
[Algorithm] 99클럽 코테 스터디 10일차 TIL | 백준_빙산(2573번) (4) | 2025.01.24 |
[Algorithm] 99클럽 코테 스터디 9일차 TIL | 백준_이분 그래프(1707번) (0) | 2025.01.23 |
[Algorithm] 99클럽 코테 스터디 8일차 TIL | 백준_단지번호붙이기(2667번) (1) | 2025.01.22 |