Algorithm

[프로그래머스/JavaScript] Lv.3 여행경로

cob 2022. 11. 11. 09:37

 

해당 문제는 DFS문제로 조건에 따른 경우의 수를 구하는 문제이다.

 

 

BFS 사용 예
- 최단거리, 최소 횟수, 미로, 탐색 등

DFS 사용 예
- 경우의 수, 이동 과정에 제약 있음 등

 

 

문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/43164

 

1. DFS 과정

경우의 수 구하는 과정

 

 

 


2. 풀이


  
var answer = [];
function solution(tickets) {
// 1) 알파벳 순서에 따른 정렬
let ticketsSort = tickets.sort();
// 2) ICN에서 출발하기 때문에 ICN 담고 시작한다.
return dfsPlan("ICN", ticketsSort, ["ICN"]);
}
function dfsPlan(ticket, ticketsSort, planArr){
// 3) 티켓이 전부 소진 되면 return 한다.
if(ticketsSort.length == 0) {
// 4) 전부 방문하면 answer에 담는다.
answer = planArr;
return answer;
}
for(let i=0; i<ticketsSort.length; i++){
// 5) 티켓의 시작 위치 = 전 티켓의 도착 위치 && answer에 값이 없을 때만 반복한다.
if(ticketsSort[i][0] == ticket && answer.length == 0) {
// 6) 방문한 테켓을 제외
let reTickets = [...ticketsSort.slice(0, i), ...ticketsSort.slice(i+1)];
// 7) 마지막 티켓에 도달( '4)'의 return )하면 모든 DFS 함수를 빠져나온다.
if( i == ticketsSort.length-1) return dfsPlan(ticketsSort[i][1], reTickets, [...planArr, ticketsSort[i][1]]);
// 8) 마지막 티켓에 도달하지 않았다면, 새로운 DFS 함수 시작한다.
else dfsPlan(ticketsSort[i][1], reTickets, [...planArr, ticketsSort[i][1]]);
}
}
// 9) '3)'에서 담은 answer를 return 한다.
return answer;
}

 

반응형