주어진 항공권을 모두 이용하여 여행경로를 짜려고 합니다. 항상 "ICN" 공항에서 출발합니다.
항공권 정보가 담긴 2차원 배열 tickets가 매개변수로 주어질 때, 방문하는 공항 경로를 배열에 담아 return 하도록 solution 함수를 작성해주세요.
| tickets | return |
|---|---|
| [["ICN", "JFK"], ["HND", "IAD"], ["JFK", "HND"]] | ["ICN", "JFK", "HND", "IAD"] |
| [["ICN", "SFO"], ["ICN", "ATL"], ["SFO", "ATL"], ["ATL", "ICN"], ["ATL","SFO"]] | ["ICN", "ATL", "ICN", "SFO", "ATL", "SFO"] |
ICN부터 출발 및 알파벳 순으로 출발할 수 있도록 해주어야 한다.stop이라는 변수를 두었고, 알파벳 순으로 막다른 길 없이 문제없이 해결이 되었다면 다시 돌아나와서 답이 달라지는 일이 없게 해주기 위한 역할을 한다.function solution(tickets) {
var answer = [];
var stop = false;
function Search(startCity, tickets, path) {
// 정답 확정 및 탈출 조건
if(tickets.length === 0) {
answer = path.concat(startCity);
stop = true;
return;
}
if(stop)
return;
// startCity에서 출발하는 티켓이 두 장 이상인 경우까지 생각한 코드
let candidates = tickets.filter(ticket => ticket[0] === startCity);
// 이거는 중간에 잘못된 경우 탈출 조건 (막다른 길)
if(candidates.length === 0)
return;
candidates.sort();
candidates.forEach(c => {
let rest = tickets.filter(ticket => ticket != c);
Search(c[1], rest, path.concat(startCity));
})
}
// ICN인거 부터 시작
let init = tickets.filter(ticket => ticket[0] === 'ICN');
init.sort();
init.forEach(it => {
Search(it[1], tickets.filter(ticket => ticket !== it), ['ICN']);
});
return answer;
}