문제 해설
- 고려해야할점
 - 
    
같인 출발이 있다면 알파벳 순서 (그래서 dfs하기전에 정렬먼저 해줌)
 - 
    
추가 이런노선이 있다면 밑에 작성한 로직으로는 1->2로 가고 종료가 되어버림 1 -> 2 1 -> 3 3 -> 1
 - 문제를 보면 “모든 도시를 방문할 수 없는 경우는 주어지지 않습니다.” 라는 조건이 있기 때문에 모든 도시를 방문할 수 있는것부터가 중요하다.
 
//실패
func solution(_ tickets:[[String]]) -> [String] {
    var visited: [Bool] = Array(repeating: false, count: tickets.count)
    var startPoint: String = "ICN"
    var result: [String] = [startPoint]
    let arr = tickets.sorted(by: { $0[1] < $1[1] })
    func dfs(_ arr: [[String]]) {
        for i in 0..<tickets.count {
            if arr[i][0] == startPoint && visited[i] == false {
                visited[i] = true
                result.append(arr[i][1])
                startPoint = arr[i][1]
                dfs(arr)
            }
        }
    }
    dfs(arr)
    return result
}
func solution(_ tickets:[[String]]) -> [String] {
   var path: [String] = []
    var answer: [String] = []
    var visited: [Bool] = Array(repeating: false, count: tickets.count)
    let arr = tickets.sorted(by: { $0[1] < $1[1] })
    func dfs(_ depth: Int, _ airport: String, _ ticket: [[String]], _ answer: inout [String], _ visited: inout [Bool], _ path: inout [String]) {
        path.append(airport)
        if depth == ticket.count { answer = path; return }
        for i in 0..<ticket.count where answer.isEmpty {
            let infomation: (start: String, end: String) = (ticket[i].first!, ticket[i].last!)
            if visited[i] == false && airport == infomation.start {
                visited[i] = true
                dfs(depth+1, infomation.end, ticket, &answer, &visited, &path)
                visited[i] = false
            }
        }
        path.removeLast()
    }
    
    dfs(0, "ICN", arr, &answer, &visited, &path)
    return answer
}
