반응형
문제
풀이
입력한 보드와 8 * 8 체스판 2개와 비교
(BWBWBWBW 시작하는 것, WBWBWBWB 시작하는 것)를 해서
최솟값을 출력해서 풀었다
코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int M = sc.nextInt();
String[] board = new String[N];
int min = 64;
int count;
sc.nextLine();
for (int i = 0; i < N; i++) {
board[i] = sc.nextLine();
}
//8 * 8 잘라서 최소값 찾기
for (int i = 0; i < N - 7; i++) {
for (int j = 0; j < M - 7; j++) {
count = compareBoard(board, i, j);
if (min > count) {
min = count;
}
}
}
System.out.println(min);
}
public static int compareBoard(String[] board, int x, int y) {
int count1 = 0;
int count2 = 0;
String[] chessBoard1 = {"BWBWBWBW","WBWBWBWB","BWBWBWBW","WBWBWBWB","BWBWBWBW","WBWBWBWB","BWBWBWBW","WBWBWBWB"};
String[] chessBoard2 = {"WBWBWBWB","BWBWBWBW","WBWBWBWB","BWBWBWBW","WBWBWBWB","BWBWBWBW","WBWBWBWB","BWBWBWBW"};
for (int i = x; i < x + 8; i++) {
for (int j = y; j < y + 8; j++) {
if (board[i].charAt(j) != chessBoard1[i - x].charAt(j - y)) {
count1++;
}
if (board[i].charAt(j) != chessBoard2[i - x].charAt(j - y)) {
count2++;
}
}
}
if (count1 > count2) {
return count2;
}
return count1;
}
}
문제를 정확하게 이해를 하지 못해서 푸는데 시간이 오래 걸렸다
처음에는 N * M 체스판을 만들어서 비교했다가 실패해서 다시 코드를 짜고
체스판이 2가지 타입인 것을 모르고 보드 입력 값의 첫 번째 값을 체스판으로 만들어서 제출을 했는데 계속 실패를 해서 질문 게시판을 보다가 테스트 케이스를 보고 깨달았다
8 8
BBBBBBBB
BBBBBBBB
BBBBBBBB
BBBBBBBB
BBBBBBBB
BBBBBBBB
BBBBBBBB
BBBBBBBW
output : 33
answer : 31
출처
반응형
'알고리즘 > 백준' 카테고리의 다른 글
백준 1110번 더하기 사이클 자바 java (0) | 2021.04.10 |
---|---|
백준 1436번 영화감독 숌 자바 java (0) | 2021.04.10 |
백준 7568번 덩치 자바 java (0) | 2021.04.09 |
백준 2798번 블랙잭 자바 java (0) | 2021.04.08 |
백준 2292번 벌집 자바 java (0) | 2021.04.08 |
댓글