[AtCoder] AtCoder Beginner Contest 311 D. Grid Ice Floor

TaeGN·2024년 10월 30일

AtCoder

목록 보기
30/55

문제풀이

  1. dfs를 사용하여 만나는 얼음의 개수를 카운팅한다.

주의사항


소요시간

10분


package AtCoder.ProblemList.Difficulty800_1199.GridIceFloor

const val EMPTY = ' '
const val ICE = '.'
const val ROCK = '#'
val dr = intArrayOf(0, 0, -1, 1)
val dc = intArrayOf(-1, 1, 0, 0)
fun main() {
    val (N, M) = readln().trim().split(" ").map(String::toInt)
    val matrix = Array(N) { readln().trim().toCharArray() }
    val visited = Array(N) { BooleanArray(M) }
    var result = 1L
    matrix[1][1] = EMPTY
    fun dfs(r: Int = 1, c: Int = 1) {
        visited[r][c] = true
        for (d in dr.indices) {
            var nr = r
            var nc = c
            while (matrix[nr + dr[d]][nc + dc[d]] != ROCK) {
                nr += dr[d]
                nc += dc[d]
                if (matrix[nr][nc] == ICE) {
                    matrix[nr][nc] = EMPTY
                    result++
                }
            }
            if (!visited[nr][nc]) dfs(nr, nc)
        }
    }
    dfs()
    println(result)
}

문제링크

https://atcoder.jp/contests/abc311/tasks/abc311_d

0개의 댓글