여행경로

📔 문제 설명

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

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

📓 제약 조건

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

📓 입출력의 예

tickets return
[["ICN", "JFK"], ["HND", "IAD"], ["JFK", "HND"]] ["ICN", "JFK", "HND", "IAD"]
[["ICN", "SFO"], ["ICN", "ATL"], ["SFO", "ATL"], ["ATL", "ICN"], ["ATL","SFO"]] ["ICN", "ATL", "ICN", "SFO", "ATL", "SFO"]

❗ 1번째

dfs문제. 내가 생각한 방법은 티켓에 사용여부를 나타내는 불리언 값을 추가를 해주고 dfs알고리즘에 따라 순회하게 한다 선택한 티켓은 사용처리되고 가장 빠른 경로를 반환하게하기

✅ 실행 코드

function solution(tickets) {
  let answer = [];
  const startAirport = "ICN";
  const upgradeTickets = tickets.map((ticket) => [...ticket, false]);

  function dfs(airport, currentTickets, allRoute) {
    if (allRoute.length === tickets.length + 1) {
      answer.push(allRoute);
      return;
    }

    currentTickets.forEach(([dep, des, isUsed], i) => {
      if (airport === dep && !isUsed) {
        const newTickets = currentTickets.map((ticket, index) =>
          index === i ? [ticket[0], ticket[1], true] : ticket,
        );
        dfs(des, newTickets, [...allRoute, des]);
      }
    });
  }

  dfs(startAirport, upgradeTickets, [startAirport]);

  answer.sort();
  return answer[0];
}

📚 문제 느낀점

파이팅


© 문제 출처

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