반응형
영식이는 직사각형 모양의 성을 가지고 있다.
성의 1층은 몇 명의 경비원에 의해서 보호되고 있다. 영식이는 모든 행과 모든 열에 한 명 이상의 경비원이 있으면 좋겠다고 생각했다.
성의 크기와 경비원이 어디 있는지 주어졌을 때, 몇 명의 경비원을 최소로 추가해야 영식이를 만족시키는지 구하는 프로그램을 작성하시오.
첫째 줄에 성의 세로 크기 N과 가로 크기 M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 성의 상태가 주어진다. 성의 상태는. 은 빈칸, X는 경비원이 있는 칸이다.
첫째 줄에 추가해야 하는 경비원의 최솟값을 출력한다.
https://www.acmicpc.net/problem/1236
처음에 단순하게 Column만 바라보고 단순하게 풀었으나 Row에 대해서도 모두 파악해줘야 정확한 답을 얻을 수 있습니다.
배열 조건 체크하는 방식으로 구성하기 위해 먼저 Row, Column에 대한 각각의 BooleanArray를 선언했습니다.
val (N, M) = readLine().split(" ").map { it.toInt() }
val castle = Array(N) { readLine().toCharArray() } //현재 구성을 입력받는다.
val row = BooleanArray(M) { false }
val col = BooleanArray(N) { false }
이제 가로축, 세로축에 대한 for문을 돌면서 Row, Column에 X가 있으면 true 처리해줍니다.
for (i in 0 until N) for (j in 0 until M) {
if (castle[i][j] == 'X') {
col[i] = true
row[j] = true
}
}
그리고 마지막에는 col과 row별 False 총개수를 서로 비교하여 더 큰 값을 반환해 주면 됩니다.
println(max(row.count { !it }, col.count { !it }))
반응형