원본 문제 : 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 |
댓글