[BOJ] 촌수계산 in Kotlin

박준규·2022년 2월 2일
0

알고리즘

목록 보기
18/39

문제풀러 가기!

요새 빡구현 문제를 잘 안풀게 되서 각성 좀 해야 할 것 같습니다. 조금씩 카카오 기출이나 삼성 기출을 풀어야 할 것 같습니다.

이 문제 역시 그렇게 어려운 문제는 아니었습니다. 그래프를 활용하면서 dfs로 순회하면 끝나는 문제였습니다. 아무래도 파이썬의 경우 대부분 골드 문제를 풀려고 노력을 많이 하는 편인데, 코틀린은 아직 언어에 익숙해지지 않아서 인지 조금씩 쉬운 문제 풀면서 언어에 익숙해지기 위한 과정인 것 같습니다. 백준 말고도 프로그래머스도 풀면서 IDE에 익숙해져야 할 것 같아요.

문제 풀이 아이디어는 문제에서 내린 조건 대로 데이터를 입력 받고 graph를 만듭니다. 그리고 시작점에서 출발하여 끝나는 지점을 계속 확인하면서 답을 도출할 값을 갱신하면 됩니다.

아래는 풀이 코드입니다.

import java.io.BufferedReader
import java.io.InputStreamReader

fun main(args: Array<String>) = with(BufferedReader(InputStreamReader(System.`in`))) {
    val n = readLine()!!.trim().toInt()
    val (start, end) = readLine()!!.split(" ").map { it.toInt() }
    val m = readLine()!!.trim().toInt()
    val graph = Array<MutableList<Int>>(n+1) { mutableListOf() }

    val visited = BooleanArray(n+1)

    var answer = 0
    for ( i in 0 until m) {
        var (s, e) = readLine()!!.split(" ").map { it.toInt() }
        graph[s].add(e)
        graph[e].add(s)
    }

    fun dfs(start: Int, num: Int) {
        if (start == end) {
            answer = num
            return
        }

        for (i in graph[start]) {
            if (!visited[i]) {
                visited[i] = true
                dfs(i, num + 1)
            }
        }
    }

    dfs(start, 0)

    when {
        answer === 0 -> println(-1)
        else -> println(answer)
    }
}

개발예술이고 서비스작품이다.

profile
'개발'은 '예술'이고 '서비스'는 '작품'이다

0개의 댓글