[백준] 성 지키기 (1236)(kotlin)

문제 설명

백준 1236번 문제 링크

입력 및 출력

» 입력

첫째 줄에 성의 세로 크기 N과 가로 크기 M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 성의 상태가 주어진다. 성의 상태는 .은 빈칸, X는 경비원이 있는 칸이다.

» 출력

첫째 줄에 추가해야 하는 경비원의 최솟값을 출력한다.

예제 입출력(테스트케이스)

입력 출력
4 4
….
….
….
….
4

문제 풀이1

import kotlin.math.max

fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
    var (N, M) = readLine().split(" ").map { it.toInt() }
    var castle = Array(N) { readLine().toCharArray() }
    var row = BooleanArray(M) { false }
    var col = BooleanArray(N) { false }

    for (i in 0 until N) for (j in 0 until M) {
        if (castle[i][j] == 'X') {
            col[i] = true
            row[j] = true
        }
    }

    val c = col.count { !it }
    val r = row.count { !it }

    println(max(r, c))
}

// N : 4, M : 6
// X.....
// .X....
// ..X...
// ...X..
// col = { t, t, t, t }
// row = { t, t, t, t, f, f }

// N : 6, M : 4
// X...
// .X..
// ..X.
// ...X
// ....
// ....
// col = { t, t, t, t, f, f }
// row = { t, t, t, t }

// N : 2, M : 2
// X.
// .X
// col = { t, t }
// row = { t, t }

// N : 2, M : 2
// .X
// X.
// col = { t, t }
// row = { t, t }

// N : 2, M : 4
// ..X.
// X...
// col = { t, t }
// row = { t, f, t, f }