function solution(tickets) {
let answer = [];
let visited = [];
function dfs(index, visited) {
if (visited.includes(index)) return;
if (visited.length + 1 === tickets.length) {
visited.push(index);
// 티켓 세개 다 방문했음
const array = [];
for (let check = 0; check < tickets.length; check++) {
array.push(tickets[visited[check]][0]);
if (check === tickets.length - 1) {
array.push(tickets[visited[check]][1]);
}
}
answer.push(array);
}
visited.push(index);
for (let check = 0; check < tickets.length; check++) {
if (tickets[index][1] === tickets[check][0]) dfs(check, [...visited]);
}
}
for (let check = 0; check < tickets.length; check++) {
if (tickets[check][0] === "ICN") {
visited = [];
dfs(check, visited);
}
}
answer.sort((a, b) => {
let strA = "";
let strB = "";
a.forEach((item) => {
strA = strA + item;
});
b.forEach((item) => {
strB = strB + item;
});
if (strA > strB) return 1;
if (strA < strB) return -1;
return 0;
});
return answer[0];
}
solution([
["ICN", "SFO"],
["ICN", "ATL"],
["SFO", "ATL"],
["ATL", "ICN"],
["ATL", "SFO"],
]);
[["ICN", "SFO"],["ICN", "ATL"],["SFO", "ATL"],["ATL", "ICN"],["ATL", "SFO"],]
다음 테스트 케이스는 여행경로가 총 세개 나온다.
처음에 프로그래머스 문제설명란을 보고 해당 테스트케이스에서 여행경로가 두개나오는줄 알았다..(착각함)
다음과 같이 세 개의 여행경로가 나오면 문자열 비교를 수행하여 가장 문자열 값이 작은 문자열을 답으로 리턴해야함.
그래서 다음과 같이 sort
하여 첫 번째 방의 값을 리턴하는 방식을 사용.
answer.sort((a, b) => {
let strA = "";
let strB = "";
a.forEach((item) => {
strA = strA + item;
});
b.forEach((item) => {
strB = strB + item;
});
if (strA > strB) return 1;
if (strA < strB) return -1;
return 0;
});