순열 문제. 백트래킹으로 풀 수 있는데, 마지막 입력값이 없을 때까지 제어하는 게 더 어려웠다.
import Foundation
while let input = readLine() {
let output1 = String(input)
let line = input.split(separator: " ")
var word = Array(String(line[0])).map{String($0)}
word.sort()
let wordCnt = word.count
let order = Int(String(line[1]))!
var check = Array(repeating: false, count: wordCnt)
var flag = false
var cnt = 0
func DFS(letters: [String]) -> Void {
if letters.count == wordCnt {
cnt += 1
if cnt == order {
flag = true
let permutation = letters.joined()
let output = output1 + " = " + permutation
print(output)
}
}
for idx in 0..<wordCnt {
if !check[idx] {
check[idx] = true
DFS(letters: letters + [word[idx]])
check[idx] = false
}
}
}
DFS(letters: [])
if !flag {
let output = output1 + " = " + "No permutation"
print(output)
}
}