문제
풀이
8 X 8 크기의 확인용 배열을 활용하여 입력받은 체스판 배열에서 최소값을 찾아내면 된다. 최소값을 찾는 방법은 for문을 통해 해당 배열의 각 칸을 확인하고, 해당 칸이 홀수 자리에 있는지 짝수 자리에 있는지 확인한다. 그리고 그 칸이 'B'인지 'W'인지를 판별하여 자리에 맞지 않는 색일 경우 값을 증가해주면 된다.
코드
import java.util.*
import kotlin.math.*
fun main() {
val br = System.`in`.bufferedReader()
val bw = System.out.bufferedWriter()
val st = StringTokenizer(br.readLine())
val cols = st.nextToken().toInt()
val rows = st.nextToken().toInt()
val board = Array(cols){ br.readLine().toCharArray() }
val chessBoard = Array(8){ CharArray(8) }
var min = cols*rows
for(i in 0 .. cols - 8) {
for(j in 0 .. rows - 8) {
for(k in i until i+8) {
for(l in j until j+8) {
chessBoard[k-i][l-j] = board[k][l]
}
}
min = min(min, checkBoard(chessBoard))
}
}
bw.write("$min")
bw.flush()
bw.close()
br.close()
}
fun checkBoard(board: Array<CharArray>): Int {
var checkB = 0
var checkW = 0
for(i in 0 until 8) {
for(j in 0 until 8) {
if((i + j) % 2 == 0) { // 짝수 칸의 경우
if(board[i][j] == 'W') checkW++
else checkB++
} else { // 홀수 칸의 경우
if(board[i][j] == 'W') checkB++
else checkW++
}
}
}
return min(checkB, checkW)
}
'알고리즘 > Baekjoon' 카테고리의 다른 글
[백준] 11053번: 가장 긴 증가하는 부분 수열 - Kotlin[코틀린] (0) | 2023.10.14 |
---|---|
[백준] 3085번: 사탕 게임 - Kotlin[코틀린] (0) | 2023.10.13 |
[백준] 1193번: 분수찾기 - Kotlin[코틀린] (0) | 2023.09.30 |
[백준] 15649 ~ 15666번: N과 M (2) ~ (12) - Kotlin[코틀린] (0) | 2023.09.29 |
[백준] 15649번: N과 M (1) - Kotlin[코틀린] (0) | 2023.09.28 |