Algorithm/프로그래머스
Swift) 프로그래머스 여행경로 - Lv. 3
콩벌레 개발자
2024. 3. 26. 20:26
https://school.programmers.co.kr/learn/courses/30/lessons/43164
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이: DFS로 모든 티켓을 소비한 경우에만 유효한 경로인 문제. 모든 노드가 연결되어야 하고 사전순으로 가장 빠른 경로가 답이므로, 티켓 배열을 정렬한 후 dfs로 출발하는 노드를 찾은 후 path에 추가한 후 다시 해당 함수를 호출하는 식으로 문제를 해결.
import Foundation
func dfs(_ ticket: [[String]], path: [String]) -> [String] {
if ticket.count == 0 {
return path
}
var validIndex = -1
for i in 0..<ticket.count {
if ticket[i][0] == path.last {
validIndex = i
break
}
}
if validIndex == -1 {
return []
}
while ticket[validIndex][0] == path.last {
var nextTicket = ticket
let removeNode = nextTicket.remove(at: validIndex)
var cpPath = path
cpPath.append(removeNode[1])
var nextPath = dfs(nextTicket, path: cpPath)
if nextPath != [] {
return nextPath
}
validIndex += 1
}
return []
}
func solution(_ tickets:[[String]]) -> [String] {
let sortedTickets = tickets.sorted { one, two in
if one[0] == two[0] {
return one[1] < two[1]
}
return one[0] < two[0]
}
return dfs(sortedTickets, path: ["ICN"])
}