Developing Myself Everyday
article thumbnail
Published 2023. 7. 23. 16:53
14719번: 빗물 - Kotlin 백준/구현
 

14719번: 빗물

첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치

www.acmicpc.net

문제

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
profile

Developing Myself Everyday

@배준형

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!