링크 :https://www.acmicpc.net/problem/14725
Trie자료구조를 이용하여 주어진 문제에 맞는 트리를 만든 후에
dfs로 트리를 순회하면서 depth에 맞는 Text 출력
소스코드 (Trie, DFS)
import java.io.*
private var N = 0 //먹이의 정보 개수 (1 ≤ N ≤ 1000)
private val trieRootNode = Node()
private val bw = BufferedWriter(OutputStreamWriter(System.out))
private fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
N = br.readLine().toInt()
repeat(N) {
br.readLine().split(" ").drop(1).also { initTrie(it) }
}
dfs(trieRootNode)
bw.flush()
bw.close()
}
private fun dfs(currentNode: Node, depth: Int = 0) {
val childMap = currentNode.childMap.toSortedMap()
if (childMap.isEmpty()) return
for (childNode in childMap) {
bw.write("${getDepthText(depth)}${childNode.key}\n")
dfs(childNode.value, depth + 1)
}
}
private fun getDepthText(depth: Int): String {
var returnDepthText = StringBuilder()
for (i in 1..depth * 2) {
returnDepthText.append('-')
}
return returnDepthText.toString()
}
private fun initTrie(dataList: List<String>) {
var currentNode = trieRootNode
for (data in dataList) {
if (currentNode.childMap[data] == null) {
currentNode.childMap[data] = Node()
}
currentNode = currentNode.childMap[data]!!
}
}
private data class Node(
val childMap: HashMap<String, Node> = hashMapOf(),
var isLast: Boolean = false
)
'Algorithm_Kotlin' 카테고리의 다른 글
[Kotlin] BOJ1890 점프 (0) | 2023.06.02 |
---|---|
[Kotlin] BOJ14499 주사위 굴리기 (0) | 2023.04.17 |
[Kotlin] BOJ16234 인구 이동 (0) | 2023.04.10 |
[Kotlin] BOJ2573 빙산 (0) | 2023.04.06 |
[Kotlin] BOJ2636 치즈 (0) | 2023.04.05 |