본문으로 바로가기

백준 1018번 체스판 다시 칠하기 java

category Algorithm by java 2019. 8. 26. 20:54


import java.util.Scanner;

public class Main {
	static char[][] whiteFirstChess = new char[8][8];
	static char[][] blackFirstChess = new char[8][8];
	static int count = Integer.MAX_VALUE;

	public static void buildChess() {
		for (int i = 0; i < 8; i++) {
			for (int j = 0; j < 8; j++) {
				if ((i % 2 == 0 || j % 2 == 0) && (i % 2 != 0 || j % 2 != 0)) {
					whiteFirstChess[i][j] = 'W';
				} else {
					whiteFirstChess[i][j] = 'B';
				}
			}
		}

		for (int i = 0; i < 8; i++) {
			for (int j = 0; j < 8; j++) {
				if ((i % 2 == 0 || j % 2 == 0) && (i % 2 != 0 || j % 2 != 0)) {
					blackFirstChess[i][j] = 'B';
				} else {
					blackFirstChess[i][j] = 'W';
				}
			}
		}

	}

	public static void compareChess(char[][] myChess, int x, int y) {
		int temp = 0;
		for (int i = 0; i < 8; i++) {
			for (int j = 0; j < 8; j++) {
				if (myChess[i + x][j + y] != whiteFirstChess[i][j]) {
					temp++;
				}
			}
		}
		count = Math.min(count, temp);

		temp = 0;
		for (int i = 0; i < 8; i++) {
			for (int j = 0; j < 8; j++) {
				if (myChess[i + x][j + y] != blackFirstChess[i][j]) {
					temp++;
				}
			}
		}

		count = Math.min(count, temp);

	}

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int m = sc.nextInt();
		char[][] myChess = new char[n][m];

		for (int i = 0; i < n; i++) {
			String s = sc.next();
			for (int j = 0; j < m; j++) {
				myChess[i][j] = s.charAt(j);
			}
		}

		buildChess();
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				if (i + 8 <= n && j + 8 <= m) {
					compareChess(myChess, i, j);
				}
			}
		}

		System.out.println(count);

	}

}
 

체스판 두가지 예시

먼저, 체스판은 두가지 경우로 나눌수가 있다.

흰색먼저 시작하는 경우, 검정색 먼저 시작하는 경우.

 

=>.검정색이 먼저 시작하는 경우.

-짝수 행 일 때, 짝수 열 이면 검정색.

-홀수 행 일 때, 홀수 열 이면 검정색

-짝수 행 일 때, 홀수 열 이면 흰색

-홀수 행 일 때, 짝수 열 이면 흰색

 

=>.흰색이 먼저 시작하는 경우.

-짝수 행 일 때, 짝수 열 이면 흰색

-홀수 행 일 때, 홀수 열 이면 흰색

-짝수 행 일 때, 홀수 열 이면 검정색

-홀수 행 일 때, 짝수 열 이면 검정색

 

1. 1번과 2번을 만족하는 8x8 체스판을 각각 만든다.

 

2. 사용자로부터 입력받은 8x8 이상의 체스판을 만든다.

 

3. 두 체스판을 비교하여, 검정색이 먼저인 경우의 체스판과 흰색이 먼저인 체스판 중 교체 횟수가 적은 수가 출력 결과이다.

'Algorithm by java' 카테고리의 다른 글

백준 1712번 손익분기점 java  (0) 2019.08.29
백준 2455번 지능형 기차 java  (0) 2019.08.27
백준 1436 영화감독 숌 java  (0) 2019.08.19
백준 7568 덩치 java  (0) 2019.08.16
2798 블랙잭 - java  (0) 2019.08.14