백준 1018 체스판 다시 칠하기 JAVA

sundays·2022년 8월 18일
0

체스판 다시 칠하기

1. 8 8 의 행으로 만들때 주어진 체스판을 가지고 만들 수 있는 경우의 수는 (width-7) (heigth-7) 이다.

  • 9 * 9 으로 이루어진 경우 (4 가지)
    • [0][0] ~ [8][8]
    • [0][1] ~ [8][9]
    • [1][0] ~ [9][8]
    • [1][1] ~ [9][9]

이 내용은 다음의 코드와 같다

		// 시작 줄과 열 
        int s_row = n - 7;
        int s_col = m - 7;

        for (int i = 0; i < s_row; i++) {
            for (int j = 0; j < s_col; j++) {
                int count = find(i, j);
                answer = Math.min(count, answer);
            }
        }

이 코드로 예제와 같이 9 * 9의 체스판이 주어졌을때 시작 행과 열이 계속 변경되면서 4번이 총 실행 될 것이다. find 함수는 가장 적게 변할 수 있는 경우의 수가 리턴 될 것이다. answer 의 변수의 경우에는 반복 할 경우에 가장 작은 수를 대입하기 위해 Math함수를 사용하였다.

2. 가장 적게 변할 수 있는 경우의 수 찾기

	/**
     * 가장 적게 변동되는 갯수 찾기
     * @param s_row 시작 줄
     * @param s_col 시작 열
     * @return 변동되는 최소 개수
     */
    private static int find(int s_row, int s_col) {
        int count = 0;
        int e_row = s_row + 8;
        int e_col = s_col + 8;

        boolean check = map[s_row][s_col];
        for (int i = s_row; i < e_row; i++) {
            for (int j = s_col; j < e_col; j++) {
                if (map[i][j] == check) {
                    count++;
                }
                check = !check;
            }
            check = !check;
        }

        return Math.min(count, 64 - count);
    }

check 변수의 경우 회차가 지남에 따라 TRUE, FALSE 값이 변경되어 B,W 의 값을 대신 해주며 교차 반복되어 값을 셋팅 해준다. 반전을 했을때를 대비하여 64 - count 를 해주어야한다 왜 64 이냐면 8 * 8 의 값을 대입 해 준 것이다.

풀이

profile
develop life

0개의 댓글