정수 배열이 아니라 문자열 배열을 통해 쉽게 join 및 비교 가능하도록 구현.
import Foundation
let number = String(readLine()!)
let numCnt = number.count
let numberArray = Array(number).map{String($0)}
var check = Array(repeating: false, count: number.count)
let INF = Int.max
var answer = INF
func DFS(cnt: Int, num: [String]) -> Void {
if cnt == numCnt {
let num = num.joined()
if num > number && Int(num)! <= answer {
answer = Int(num)!
}
return
}
for idx in 0..<numCnt {
if !check[idx] {
check[idx] = true
DFS(cnt: cnt + 1, num: num + [numberArray[idx]])
check[idx] = false
}
}
}
DFS(cnt: 0, num: [])
if answer == INF {
print(0)
} else {
print(answer)
}