[백준 - 2583] 영역구하기
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
}
주석 없는 코드를 만들기 위해 노력하는 개발자입니다.
혹시라도 의도가 분명하지 않아보이는 (이해가 되지 않는) 코드가 있으시다면 편하게 답변 달아주시면 정말 감사하겠습니다.
Author And Source
이 문제에 관하여([백준 - 2583] 영역구하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kldaji/백준-2583-영역구하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)