시배's Android

Algorithm | 백준 Kotlin 6443 애너그램 본문

Algorithm

Algorithm | 백준 Kotlin 6443 애너그램

si8ae 2023. 9. 23. 22:27
 

6443번: 애너그램

첫째 줄에 단어의 개수 N 이, 둘째 줄부터 N개의 영단어가 들어온다. 영단어는 소문자로 이루어져 있다. 단어의 길이는 20보다 작거나 같고, 애너그램의 수가 100,000개 이하인 단어만 입력으로 주

www.acmicpc.net

 

private fun main() {
    fun dfs(alphabet: IntArray, length: Int, str: String) {
        if (str.length == length) {
            println(str)
            return
        }
        for (i in alphabet.indices) {
            if (alphabet[i] > 0) {
                alphabet[i]--
                dfs(alphabet, length, str + (i + 'a'.code).toChar())
                alphabet[i]++
            }
        }
    }

    repeat(readln().toInt()) {
        val input = readln()
        val alphabet = IntArray('z' - 'a' + 1)
        input.forEach { alphabet[it - 'a']++ }
        dfs(alphabet, input.length, "")
    }
}