링크 :https://www.acmicpc.net/problem/14725

 

14725번: 개미굴

첫 번째 줄은 로봇 개미가 각 층을 따라 내려오면서 알게 된 먹이의 정보 개수 N개가 주어진다.  (1 ≤ N ≤ 1000) 두 번째 줄부터 N+1 번째 줄까지, 각 줄의 시작은 로봇 개미 한마리가 보내준 먹이

www.acmicpc.net

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