문제
2차원 세계에 블록이 쌓여있다. 비가 오면 블록 사이에 빗물이 고인다.
비는 충분히 많이 온다. 고이는 빗물의 총량은 얼마일까?
입력
첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500)
두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치부터 차례대로 W개 주어진다.
따라서 블록 내부의 빈 공간이 생길 수 없다. 또 2차원 세계의 바닥은 항상 막혀있다고 가정하여도 좋다.
출력
2차원 세계에서는 한 칸의 용량은 1이다. 고이는 빗물의 총량을 출력하여라.
빗물이 전혀 고이지 않을 경우 0을 출력하여라.
나의 풀이
이 문제는 간단한 구현 문제이다. 주어진 조건에 맞게 작성하면 된다. 주어진 가로와 세로의 길이가 그렇게 크지 않기에 완전탐색으로 진행하였다.
import java.util.*
fun main() = with(System.`in`.bufferedReader()) {
val (h, w) = readLine().split(" ").map { it.toInt()}
val world = Array(h) { BooleanArray(w) }
var result = 0
readLine().split(" ").mapIndexed { i, block ->
for (j in h - 1 downTo h - block.toInt()) {
world[j][i] = true
}
}
for (i in 0 until h) {
var count = 0
var check = false
for (j in 0 until w) {
if (check) {
if (world[i][j] == true) {
result += count
count = 0
} else {
count++
}
} else {
if (world[i][j] == true) {
check = true
}
}
}
}
println(result)
}
'백준 > 구현' 카테고리의 다른 글
21608번: 상어 초등학교 - Kotlin (0) | 2023.07.26 |
---|---|
20055번 - 컨베이어 벨트 위의 로봇 (0) | 2023.07.25 |
17144번: 미세먼지 안녕! - Kotlin (1) | 2023.06.09 |
15685: 드래곤 커브 - Kotlin (0) | 2023.05.23 |
14890번: 경사로 - Kotlin (0) | 2023.03.29 |