최대 1 분 소요

아침 코딩 공부

주어진 항공권을 모두 이용하여 여행경로를 짜려고 한다. 항상 ICN 공항으로 출발한다. 항공권 정보가 담긴 2차원 배열 TICKET이 매개변수로 주어질 때 방문하는 공항 결로를 배열에 담아 return 하도록 해보자.

제한 사항

  • 모든 공항은 3글자 알파벳 대문자로 이뤄짐.
  • 공항의 수는 3개 이상 10000개 이하
  • ticket의 각 행 (a,b)는 a에서 b 로 가는 항공이란 의미
  • 주어진 항공권은 모두 사용해야 함
  • 사용 가능한 경로가 2개 이상일 경우 알파벳 순서가 앞서는 경로를 return함(sort 함수 사용)
  • 모든 도시를 방문할 수 없는 경우는 없음

위의 문제 사항을 듣고 푼 문제

function solution(tickets) {
    let answer = [];
    tickets.sort();

    let findlist = new Map();
    let findset = new Set();

    tickets.forEach(element => {
        if(!findlist.has(element[0]))
        {
            let list = new Array();
            list.push(element[1]);
            findlist.set(element[0], list);
        }
        else
        {
            findlist.set(element[0], [...findlist.get(element[0]), element[1]]);
        }

        findset.add(element[0]);
        findset.add(element[1]);
    });

    for(let key in findlist)
    {
      findlist[key].sort();
    }

    findlist.get('ICN');
    answer.push('ICN');
    //키를 입력해서 findlist에서 탐색을 시작하자.
    function dfs(key)
    {
        if(findlist.has(key))
        {
            let checklist = findlist.get(key);
            checklist.forEach(element => {
                answer.push(element);
                dfs(element);
            });
        }
        else
        {
            if(findset.size > answer.length)
            {
                answer.pop();
                return;
            }
            
        }
    }

    return answer;
}

뭔가 풀이가 길어져 버린 것 같고 답이 맞는지 체크는 해보지 못했지만 일단 dfs 방식의 연습으론 괜찮았던 것 같다.

태그:

카테고리:

업데이트: