알고리즘/브루트포스(Brute Force)
[백준][1018] 체스판 다시 칠하기
금님은님아부지
2024. 5. 24. 13:59
728x90
- https://www.acmicpc.net/problem/1018
풀이
1. 8X8 확인을 위한 체스판을 선언한다. 이때 2가지 경우를 선언한다. (0, 0) 이 W로 시작하는 것과 B로 시작하는 것으로 2가지를 선언한다.
2. 입력으로 들어오는 체스판을 8X8 확인 용 체스판과 각각 비교하여 각 char 글자가 다를 경우 count 를 증가 한다.
3. result 에 최소값을 저장한다.
코드
import java.io.BufferedReader
import java.io.InputStreamReader
fun main(args: Array<String>) {
val br = BufferedReader(InputStreamReader(System.`in`))
val (N, M) = br.readLine().split(" ").map { it.toInt() }
val chess = Array(N) {
CharArray(M) { '0' }
}
for (i in 0 until N) {
chess[i] = br.readLine().toCharArray()
}
val check1 = arrayOf(
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW"
)
val check2 = arrayOf(
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB"
)
var result = Int.MAX_VALUE
for (i in 0 until N) {
for (j in 0 until M) {
if (i + 7 >= N || j + 7 >= M) continue
var count = 0
// check1 과 입력 값 비교
for (k in 0 until 8) {
for (l in 0 until 8) {
if (check1[k][l] != chess[k + i][l + j]) {
count++
}
}
}
result = Math.min(result, count)
}
}
for (i in 0 until N) {
for (j in 0 until M) {
if (i + 7 >= N || j + 7 >= M) continue
var count = 0
// check2 과 입력 값 비교
for (k in 0 until 8) {
for (l in 0 until 8) {
if (check2[k][l] != chess[k + i][l + j]) {
count++
}
}
}
result = Math.min(result, count)
}
}
println(result)
}
728x90