문제 링크 (opens new window)

# 풀이 (정답)

  1. DFS로 풀이
  2. 뎁스를 두어 K값 이상으로 순회중인 경우를 재귀 종료 조건으로 두었음
  3. 부등호 <인 경우 순회중인 숫자보다 큰 값들을 순회하고 반대인 경우 작은 값들을 순회
  4. 순회 이후에는 원복해서 다시 시작
  5. 최종 탈출조건이 되었을때는 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()!)