[백준 - 1068] 트리

kldaji·2022년 3월 10일
1

백준

목록 보기
30/76

문제링크

  • dfs를 시작할 root index를 저장합니다.
  • 삭제할 index의 부모, 자식은 연결하지 않습니다.
  • 생성한 Tree를 dfs를 통해 순회하면서 leaf node의 개수를 구합니다.
  • 이 때, 삭제한 index가 root라면, 전체 Tree가 삭제된 것이므로 leaf node의 개수는 0개입니다.
var answer = 0

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

    val n = bufferedReader.readLine().toInt()
    val tree = Array<MutableList<Int>>(n) { mutableListOf() }
    val parentInfo = bufferedReader
        .readLine()
        .split(" ")
        .map { it.toInt() }
    val removedNode = bufferedReader.readLine().toInt()

    var startRoot = -1
    for (i in parentInfo.indices) {
        if (parentInfo[i] == -1) {
            startRoot = i
            continue
        }
        if (parentInfo[i] == removedNode || i == removedNode) continue

        tree[parentInfo[i]].add(i)
    }

    if (removedNode == startRoot) bufferedWriter.write("0")
    else {
        dfs(tree, startRoot)
        bufferedWriter.write("$answer")
    }

    bufferedReader.close()
    bufferedWriter.close()
}

fun dfs(tree: Array<MutableList<Int>>, root: Int) {
    if (tree[root].isEmpty()) {
        answer++
        return
    }

    tree[root].forEach { child ->
        dfs(tree, child)
    }
}

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

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

profile
다양한 관점에서 다양한 방법으로 문제 해결을 지향하는 안드로이드 개발자 입니다.

0개의 댓글