728x90
예제 입력1
8 8
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBBBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBWBWBW
예제 출력1
1
예제 입력2
10 13
BBBBBBBBWBWBW
BBBBBBBBBWBWB
BBBBBBBBWBWBW
BBBBBBBBBWBWB
BBBBBBBBWBWBW
BBBBBBBBBWBWB
BBBBBBBBWBWBW
BBBBBBBBBWBWB
WWWWWWWWWWBWB
WWWWWWWWWWBWB
예제 출력2
12
풀이
- 기준이 되는 원본 데이터를 선언한다.(왼쪽 상단 첫번째가 검은색으로 시작하는 8X8 체스판과 흰색으로 시작하는 체스판)
val originB = arrayOf(
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB"
)
val originW = arrayOf(
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW"
)
- 입력된 데이터를 2차원 char array 에 저장한다.
- char array 를 8X8 로 짜른 후 검은색 원본과 비교해서 다시 칠하는 수를 구하고 흰색 원본과 비교해서 다시 칠하는 수를 구해서 두 수중 최소값을 구한다.
- 입력된 데이터를 전체 검색하여 3번과정에서 나온 값들 중 최소값을 구한다.
import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.*
var chess: Array<CharArray> = arrayOf()
val originB = arrayOf(
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB"
)
val originW = arrayOf(
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
)
fun main(args: Array<String>) {
val br = BufferedReader(InputStreamReader(System.`in`))
val st = StringTokenizer(br.readLine())
val n = st.nextToken().toInt() // 세로
val m = st.nextToken().toInt() // 가로
chess = Array(n) {
br.readLine().toCharArray()
}
var result = Int.MAX_VALUE
for (i in 0..(n - 8)) {
for (j in 0..(m - 8)) {
val min = find(i, j)
if (result > min) {
result = min
}
}
}
println(result)
}
private fun find(x: Int, y: Int): Int {
var countB = 0
var countW = 0
for (i in x until (x + 8)) {
for (j in y until (y + 8)) {
if (chess[i][j] != originB[i - x][j - y]) countB++
else if (chess[i][j] != originW[i - x][j - y]) countW++
}
}
return countB.coerceAtMost(countW)
}
728x90
'알고리즘' 카테고리의 다른 글
[알고리즘][KOTLIN] 합병 정렬 - O(nlogn) (0) | 2021.12.01 |
---|---|
[알고리즘][KOTLIN] 정렬(선택 정렬, 버블 정렬, 삽입 정렬) - O(N^2) (0) | 2021.11.30 |
[백준][KOTLIN][2231] 분해합 (0) | 2021.11.26 |
[알고리즘][KOTLIN] 이진 탐색 (0) | 2021.11.22 |
[KOTLIN] 주어진 입력을 역순으로 출력하기 (0) | 2021.11.21 |