본문 바로가기
코딩연습

[백준] 체스판 다시 칠하기(1018)(Kotlin)

by 유줘니 2020. 1. 22.

원본 문제 : https://www.acmicpc.net/problem/1018

 

<첫번째>

import java.io.BufferedReader
import java.io.InputStreamReader

val wb = arrayOf("WBWBWBWB", "BWBWBWBW", "WBWBWBWB", "BWBWBWBW", "WBWBWBWB", "BWBWBWBW", "WBWBWBWB", "BWBWBWBW")
val bw = arrayOf("BWBWBWBW", "WBWBWBWB", "BWBWBWBW", "WBWBWBWB", "BWBWBWBW", "WBWBWBWB", "BWBWBWBW", "WBWBWBWB")
var map: Array<CharArray> = arrayOf()

fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {

    val input = readLine().split(" ")
    val x = input[0].toInt()
    val y = input[1].toInt()
    var min = x * y
    map = Array(x) { CharArray(y) }

    for ( i in 0 until x )
        map[i] = readLine().toCharArray()


    var xShift = 0
    var yShift = 0
    while (true) {

        if ( xShift + 8 > x ) break

        min = Math.min(min, checkChess(xShift, yShift))

        if (yShift + 8 < y) yShift++
        else {
            yShift = 0; xShift++
        }
    }

    println(min)
}

fun checkChess(xShift: Int, yShift: Int): Int {
    var cntW = 0
    var cntB = 0

    for ( i in xShift until xShift + 8) {
        val bwArr = bw[i-xShift].toCharArray()
        val wbArr = wb[i-xShift].toCharArray()

        for ( j in yShift until yShift + 8 ) {

            if (bwArr[j-yShift] != map[i][j])
                cntW += 1
            if (wbArr[j-yShift] != map[i][j])
                cntB += 1
        }
    }

    return Math.min(cntB, cntW)
}

 

<두번째> 2020/06/09

import java.io.BufferedReader
import java.io.InputStreamReader

var nm: List<Int> = listOf()
var matrix: Array<CharArray> = arrayOf()
val bw = charArrayOf('B','W','B','W','B','W','B','W')
val wb = charArrayOf('W','B','W','B','W','B','W','B')

fun check(x: Int, y: Int): Int {

    var cntW = 0
    var cntB = 0

    for (i in x until x + 8) {

        when(i%2) {
            0 -> {
                for (j in y until y + 8) {
                    if (bw[j - y] != matrix[i][j])
                        cntB++
                    if (wb[j - y] != matrix[i][j])
                        cntW++
                }
            }
            1 -> {
                for (j in y until y + 8) {
                    if (bw[j - y] != matrix[i][j])
                        cntW++
                    if (wb[j - y] != matrix[i][j])
                        cntB++
                }
            }
        }
    }

    return Math.min(cntW, cntB)

}
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {

    nm = readLine()
            .split(" ")
            .map { it.toInt() }
    matrix = Array(nm[0]) { IntArray(nm[1]) }
            .map { readLine().toCharArray() }
            .toTypedArray()

    var xShift = 0
    var yShift = 0
    var min = nm[0] * nm[1]

    while (true) {
        if (yShift + 8 > nm[1]) break

        min = Math.min(min, check(xShift, yShift))

        if (xShift + 8 < nm[0]) xShift++
        else {
            xShift = 0
            yShift++
        }
    }

    println(min)
    
}

'코딩연습' 카테고리의 다른 글

[백준] 플로이드 (11404)(Kotlin)  (0) 2020.01.30
[백준] 숨바꼭질 (1697)(Kotlin)  (0) 2020.01.29
[백준] 토마토 (7576)(Kotlin)  (0) 2020.01.29
[백준] DFS와 BFS (1260)(Kotlin)  (0) 2020.01.29
[백준] 미로 탐색(2178)(Kotlin)  (0) 2020.01.22

댓글