[알고리즘] 백준 - 1018 (체스판 다시 칠하기) / 자바

배고픈메꾸리·2021년 1월 28일
0

알고리즘

목록 보기
8/128
import java.util.Scanner;

public class Test_1018 {
	static char[][] arr;  
	static char[][] tempBoard = new char[8][8];  // 임시로 비교할 체스판
	static char[][] whiteStartBoard = {  // W로 시작하는 체스판
			{'W','B','W','B','W','B','W','B'},
			{'B','W','B','W','B','W','B','W'},
			{'W','B','W','B','W','B','W','B'},
			{'B','W','B','W','B','W','B','W'},
			{'W','B','W','B','W','B','W','B'},
			{'B','W','B','W','B','W','B','W'},
			{'W','B','W','B','W','B','W','B'},
			{'B','W','B','W','B','W','B','W'}
	};
	
	static char[][] blackStartBoard = { // B으로 시작하는 체스판
			{'B','W','B','W','B','W','B','W'},
			{'W','B','W','B','W','B','W','B'},
			{'B','W','B','W','B','W','B','W'},
			{'W','B','W','B','W','B','W','B'},
			{'B','W','B','W','B','W','B','W'},
			{'W','B','W','B','W','B','W','B'},
			{'B','W','B','W','B','W','B','W'},
			{'W','B','W','B','W','B','W','B'}
	};
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int x = sc.nextInt();
		int y = sc.nextInt();
		arr = new char[x][y];
		
		for( int i = 0 ; i < x ; i++ ) { // 행 단위로 입력
			String xline = sc.next();	
			for( int j = 0 ; j < y ; j++ ) {
				arr[i][j] = xline.charAt(j);
			}
		}
		int min = 64;
		// 시작점을 달리하여 체스판을 검사
		for( int  i = 0 ; i <= (x-8) ; i++ ) {
			for(int  j = 0 ; j <= (y-8) ; j++ ) {
				min = count(i,j,min); 
			}
			
		}
		System.out.println(min);
		
	}
	static int count(int startX, int startY , int min) { 
		int countB =0; // whiteStartBoard 와  비교하여 얻은 카운트
		int countW =0; // whiteStartBoard 와 비교하여 얻은 카운트
		int x=0;
		StringBuilder builder = new StringBuilder("");
		
		//8x8 임시 체스판 생성
		for(int i = startX ; i < (startX+8) ; i++) { 
			builder.setLength(0); 
			
			for(int j= startY ; j< (startY+8) ; j++) {
				builder.append(arr[i][j]); 
			}		
			
			for(int j=0 ; j<builder.length() ; j++) {
				tempBoard[x][j] = builder.charAt(j);
			}
			x++; // 체스판 행 증가, 
			
		}
				
		//비교
		for(int i=0 ; i < tempBoard.length ; i++) { 
			for(int j=0 ; j < tempBoard[i].length ; j++) {									
						if( tempBoard[i][j] != blackStartBoard[i][j]) { // black의 규칙으로 변환되는 횟수
							countB++;
						}		
						if(tempBoard[i][j] != whiteStartBoard[i][j] ) { // white의 규칙으로 변환되는 횟수
							countW++;
						}			
				}			
				
			}
				
		
		return Math.min(Math.min(countB, countW), min); 
        											 
	}
	
}

반복문이 너무 많이 중첩되길래 잘못짜는건가 해서 인터넷 찾아봤더니 정상적인 풀이였다.

profile
FE 개발자가 되자

0개의 댓글