Algorithm
[프로그래머스][코딩테스트 고득점 Kit][Javascript] 여행 경로
밍맹030
2023. 8. 9. 15:59
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/43164?language=javascript
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
전체 코드
function solution(tickets) {
// 가능한 경로가 여러 개인 경우
// 알파벳순으로 빠른 것을 return 해야하므로 정렬
tickets.sort();
let answer = [];
let usedTickets = Array.from({length: tickets.length}, ()=>0);
// nowCity : 현재 위치한 도시
// count : 사용한 티켓 수
// route : 여행 경로
function dfs(nowCity, count, route){
// ticket을 모두 확인한 경우
// 현재 경로를 push하고 dfs 탐색 종료
if(count==tickets.length){
answer.push(route);
return;
}
for(let i = 0; i<tickets.length; i++){
// 사용하지 않은 티켓이고 티켓의 출발지가 현재 도시와 동일한 경우
if(usedTickets[i]==0 && tickets[i][0]==nowCity){
// 티켓 사용 처리
usedTickets[i]=1;
// 현재 위치한 도시를 티켓의 도착지로 갱신
// 사용한 티켓 수와 여행 경로 갱신
dfs(tickets[i][1], count+1, route+" "+tickets[i][1]);
// dfs 탐색 종료 후 티켓 사용 처리 초기화
usedTickets[i]=0;
}
}
}
// 출발은 항상 "ICN"에서 시작하므로
// nowCity와 route의 초기값으로 "ICN" 입력
dfs("ICN", 0, "ICN");
// 현재 "ICN ATL ICN SFO ATL SFO"와 같이
// 문자열의 상태이므로
// split 함수를 통해 문자열 배열 return
return answer[0].split(" ");
}
728x90