# 풀이 (정답)
- DFS로 풀이
- 뎁스를 두어 K값 이상으로 순회중인 경우를 재귀 종료 조건으로 두었음
- 부등호
<
인 경우 순회중인 숫자보다 큰 값들을 순회하고 반대인 경우 작은 값들을 순회 - 순회 이후에는 원복해서 다시 시작
- 최종 탈출조건이 되었을때는 visited 뎁스값 크기 기준으로 (방문했던 순서) 정렬하여 문자열 생성
import Foundation
let k = Int(readLine()!)!
let sign = readLine()!.split(separator: " ").map { String($0) }
var visited: [Int] = .init(repeating: -1, count: 10)
var ret: [String] = []
// 완탐 - 10^10
func dfs(_ number: Int, _ depth: Int) {
visited[number] = depth
if depth >= k {
// 순서대로 순회하면 안됨 / trace
var temp: [(Int, Int)] = []
for (index, visited) in visited.enumerated() {
if visited == -1 {
continue
}
temp.append((index, visited))
}
var str = ""
for (_, (index, _)) in temp.sorted(by: {$0.1 < $1.1}).enumerated() {
str += "\(index)"
}
ret.append(str)
return
}
switch sign[depth] {
case "<":
for i in number + 1..<10 {
if visited[i] != -1 {
continue
}
dfs(i, depth + 1)
visited[i] = -1
}
case ">":
for i in 0..<number {
if visited[i] != -1 {
continue
}
dfs(i, depth + 1)
visited[i] = -1
}
default:
return
}
}
for i in 0...9 {
dfs(i, 0)
visited[i] = -1
}
print(ret.max()!, ret.min()!)