난이도: Silver 1
프로그래밍 언어: Kotlin
문제명: 단지번호붙이기
푼일자: 2021년 11월
주소: https://www.acmicpc.net/problem/2667
문제풀기
이게 실버 1 문제라고..? 하면서 너무 쉽게 풀어버린 문제였습니다.
dfs 를 이용하였습니다.
package kr.kua.baekjoon
val dirs = arrayOf(intArrayOf(-1, 0), intArrayOf(1, 0), intArrayOf(0, 1), intArrayOf(0, -1))
var m = 0
var n = 0
var t = 0
fun main() = with(System.`in`.bufferedReader()) { // 단지번호붙이기
m = readLine().toInt()
n = m
val grid: Array<CharArray> = Array(m) { CharArray(n) }
repeat(m) { grid[it] = readLine().toCharArray() }
val list = mutableListOf<Int>()
for (i in 0 until m) {
for (j in 0 until n) {
if (grid[i][j] == '1') {
t = 0
dfs(grid, i, j)
list.add(t)
}
}
}
println(list.count())
list.sorted().forEach { println(it) }
}
fun dfs(grid: Array<CharArray>, i: Int, j: Int) {
if (i < 0 || i >= m || j < 0 || j >= n || grid[i][j] != '1') return
t++
grid[i][j] = 'X'
for (dir in dirs) dfs(grid, i + dir[0], j + dir[1])
}
반응형