해당 문제는 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;
}
반응형
'Algorithm' 카테고리의 다른 글
[프로그래머스/JavaScript] Lv.2 숫자의 표현 (0) | 2022.11.19 |
---|---|
[프로그래머스/JavaScript] Lv.2 숫자 카드 나누기 (0) | 2022.11.17 |
[프로그래머스/JavaScript] Lv.3 아이템 줍기 (0) | 2022.11.08 |
[프로그래머스/JavaScript] Lv.3 단위변환 (0) | 2022.11.03 |
[프로그래머스/JavaScript] Lv.2 게임 맵 최단거리 (2) | 2022.10.28 |