본문 바로가기
개발 공부/알고리즘 개념+문제풀이

[프로그래머스 3단계] 여행경로 with 자바스크립트

by 크롱이크 2021. 7. 4.

문제설명

주어진 항공권을 모두 이용하여 여행경로를 짜려고 합니다. 항상 "ICN" 공항에서 출발합니다.

항공권 정보가 담긴 2차원 배열 tickets가 매개변수로 주어질 때, 방문하는 공항 경로를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

 

주의사항

  • 모든 공항은 알파벳 대문자 3글자로 이루어집니다.
  • 주어진 공항 수는 3개 이상 10,000개 이하입니다.
  • tickets의 각 행 [a, b]는 a 공항에서 b 공항으로 가는 항공권이 있다는 의미입니다.
  • 주어진 항공권은 모두 사용해야 합니다.
  • 만일 가능한 경로가 2개 이상일 경우 알파벳 순서가 앞서는 경로를 return 합니다.
  • 모든 도시를 방문할 수 없는 경우는 주어지지 않습니다.

입출력예시

코드

function solution(tickets){
       let routes = [];  //가능한 루트들을 담을 배열
                       
       function dfs (extraTickets, currentLocation,route ) {
       //3가지 인자를 받는다. 남은 티켓들, 현재 위치, 배열
            if(extraTickets.length===0){
            //extraTickets의 길이가 0이라는 것은 tickets에 있는 티켓을 모두 사용했다는것.
            //그렇지 않을 경우엔 길이가 0이 될 수 없다.
           		routes.push(route)
                //모두 사용했으니 route를 routes에 푸쉬해주자. 
                console.log(routes); //한번찍어봄
            }
            else{
            //길이가 0이 아니라면 아직 티켓이 남았다는 얘기
                extraTickets.forEach(([departure, destination], index) => {
                //forEach문으로 구조분해할당으로 하나의 배열마다 접근하고, 인덱스 가져온다.
                   if( currentLocation === departure){
                   //현재 위치와 출발지가 같다는 조건을 만들어준다. 출발지랑 같아야 한다.(명심)
                        const newTickets = extraTickets.slice(); //티켓을 얕은 복사해서
                        newTickets.splice(index,1)   
                        //커런트로케이션이랑 같은 디파츄어가 있는 배열을 빼준 배열을 만든다.
                        
                        dfs(newTickets, destination, route.concat(destination))
                     //하나가 빠진 배열과 데스티네이션, 도착지를 추가한 배열을 재귀돌린다.
                     //한바퀴를 돈 상태에선 다음과 같을거다.
 //dfs([ ["ICN", "ATL"], ["SFO", "ATL"], ["ATL", "ICN"], ["ATL", "SFO"]]) , "SFO", ["ICN","SFO"])
                    }
                });
            }
        }
        dfs(tickets , "ICN" , ["ICN"])
        //초기값을 설정한다. 인천에서 출발하여야하니 현재위치에 인천을,
        배열안에도 인천을 넣어준 상태로 출발
        return  routes.sort()[0];
        //오름차순 정렬해서 첫번째 요소만 꺼낸다.
    }

 

해석

주석참조.

 

한줄평

처음에 감을 하나도 못잡아서 같은 하는 분과 통과한 코드를 분석하였다. 이렇게 흘러가는구나라는 걸 정확히 알 수 있었다.

혼자서도 이런 코드를 작성할 수 있도록 더욱더 정확히 공부하자 

 

링크

https://programmers.co.kr/learn/courses/30/lessons/43164

 

 

 

반응형

댓글