문제링크
- 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)
}
}
주석 없는 코드를 만들기 위해 노력하는 개발자입니다.
혹시라도 의도가 분명하지 않아보이는 (이해가 되지 않는) 코드가 있으시다면 편하게 답변 달아주시면 정말 감사하겠습니다.