Java & Spring/코딩테스트

[백준] Java - 1018번 : 체스판 다시 칠하기

DJ.Kang 2024. 11. 29. 14:11

- 알고리즘 : 브루트 포스

- 전체 코드

 

- 풀이과정

 

1. 8 * 8 체스판 생성하기

위 그림과 같이 M, N - 8까지 진행

  for (int i = 0; i <= M - 8; i++) {
            for (int j = 0; j <= N - 8; j++) {
                sb = new StringBuilder();
                int line = 0;
                while (line < 8) {
                    sb.append(arr[j + line], i, i + 8);
                    line++;
                }

 

 

2. 첫번째 칸이 Black인 경우 & 첫번째 칸이 White인 경우

private static int startB(StringBuilder sb) {

        int count1 = 0;
        for (int i = 1; i <= 8; i++) {
            if (i % 2 == 1) {
                for (int j = (i - 1) * 8; j < i * 8; j += 2) {
                    if (sb.charAt(j) != 'B') {
                        count1++;
                    }
                    if (sb.charAt(j + 1) != 'W') {
                        count1++;
                    }
                }
            } else {
                for (int j = (i - 1) * 8; j < i * 8; j += 2) {
                    if (sb.charAt(j) != 'W') {
                        count1++;
                    }
                    if (sb.charAt(j + 1) != 'B') {
                        count1++;
                    }
                }
            }
        }
        return count1;
    }

 

3. 두 경우 중 변경이 작은 수 반환 & 전체 경우의 수 중 가장 작은지 판단

                if (min > Math.min(count1, count2)) {
                    min = Math.min(count1, count2);
                }