[백준 - 2583] 영역구하기

14224 단어 BFSkotlinBFS

문제링크

import java.util.*

fun main() {
    val bufferedReader = System.`in`.bufferedReader()
    val bufferedWriter = System.out.bufferedWriter()

    val (m, n, k) = bufferedReader
        .readLine()
        .split(" ")
        .map { it.toInt() }
    val paper = Array(m) { Array(n) { 0 } }

    repeat(k) {
        val (x1, y1, x2, y2) = bufferedReader
            .readLine()
            .split(" ")
            .map { it.toInt() }

        for (i in x1 until x2) {
            for (j in y1 until y2) {
                paper[j][i] = 1
            }
        }
    }

    val areas = mutableListOf<Int>()
    for (i in 0 until m) {
        for (j in 0 until n) {
            if (paper[i][j] == 0) {
                areas.add(getArea(paper, i, j, m, n))
            }
        }
    }
    
    areas.sort()
    bufferedWriter.write("${areas.size}\n")
    areas.forEach { area -> bufferedWriter.write("$area ") }

    bufferedReader.close()
    bufferedWriter.close()
}

fun getArea(paper: Array<Array<Int>>, startY: Int, startX: Int, m: Int, n: Int): Int {
    val dy = listOf(1, 0, -1, 0)
    val dx = listOf(0, 1, 0, -1)
    val queue: Queue<Pair<Int, Int>> = LinkedList()
    queue.add(Pair(startY, startX))
    paper[startY][startX] = 1
    var area = 1

    while (queue.isNotEmpty()) {
        val (y, x) = queue.poll()

        for (i in 0 until 4) {
            val ny = y + dy[i]
            val nx = x + dx[i]
            if (ny in 0 until m && nx in 0 until n && paper[ny][nx] == 0) {
                paper[ny][nx] = 1
                queue.add(Pair(ny, nx))
                area++
            }
        }
    }
    return area
}

주석 없는 코드를 만들기 위해 노력하는 개발자입니다.

혹시라도 의도가 분명하지 않아보이는 (이해가 되지 않는) 코드가 있으시다면 편하게 답변 달아주시면 정말 감사하겠습니다.

좋은 웹페이지 즐겨찾기