본문 바로가기
코딩테스트 준비(kotlin)/브루트 포스

[kotlin] 백준 1018번 체스판 다시 칠하기

by 1chanhue1 2023. 10. 20.

풀이

 

먼저 나는 체스판의 시작이 B,W 총 2가지의 경우로 가정하였다.

또한 체스판의 크기가 9*9로 고정이므로, 우리가 9*9 크기에 체스판에 맞춰서 검사해야 할 경우의 수는

(행의 크기-1)*(열의크기-1) 만큼 검사해야한다.

 -> 즉 2 * (행의 크기-1) * (열의 크기 -1) 의 경우의 수가 나온다. 

 

 

package com.example.codingtest

import java.io.BufferedReader
import java.io.InputStreamReader
import kotlin.math.min

fun main(){



    val br=BufferedReader(InputStreamReader(System.`in`))


    val a=br.readLine()!!.split(' ')

    val row=a[0].toInt()
    val column=a[1].toInt()


    val inputarray = Array(row,{CharArray(column,{'1'})})
              // Array(행의 크기, {IntArray(열의 크기, {초기화 값})}


    for(i in 0..row-1){ // 행의 크기만큼
        val line=br.readLine()
        for(j in 0..column-1){  // 열의 크기만큼
            inputarray[i][j]=line[j]
        }
    }


    var mincount=10000000
    var checkB='B'
    var checkW='W'

    for(r in 0..1) { // 시작이 W, B 경우의 수 2가지이므로
        if(r==1){
            checkB='W'
            checkW='B'
        }
        for (k in 0..row - 8) {         // 체스판의 크기가 9*9 로 고정이므로, (row-1)*(column-1) 만큼의 검사를 해줘야한다.
            for (t in 0..column - 8) {

                var count = 0
                for (i in 0 + k..7 + k) {
                    for (j in 0 + t..7 + t) {
                        if ((i + j) % 2 == 0) {
                            if (inputarray[i][j] == checkB) {
                                count++

                            }
                        } else {
                            if (inputarray[i][j] == checkW) {
                                count++

                            }

                        }

                    }
                }
                if (count < mincount) {
                    mincount = count
                }


            }
        }
    }
    println(mincount)


    }