[ALGORITHM NINJA] 깊이너비우선탐색 4번 여행경로 (구현)

NinjaJuunzzi·2021년 5월 15일
0

코드

function solution(tickets) {
  let answer = [];
  let visited = [];
  function dfs(index, visited) {
    if (visited.includes(index)) return;
    if (visited.length + 1 === tickets.length) {
      visited.push(index);
      // 티켓 세개 다 방문했음
      const array = [];
      for (let check = 0; check < tickets.length; check++) {
        array.push(tickets[visited[check]][0]);
        if (check === tickets.length - 1) {
          array.push(tickets[visited[check]][1]);
        }
      }
      answer.push(array);
    }

    visited.push(index);
    for (let check = 0; check < tickets.length; check++) {
      if (tickets[index][1] === tickets[check][0]) dfs(check, [...visited]);
    }
  }

  for (let check = 0; check < tickets.length; check++) {
    if (tickets[check][0] === "ICN") {
      visited = [];
      dfs(check, visited);
    }
  }

  answer.sort((a, b) => {
    let strA = "";
    let strB = "";

    a.forEach((item) => {
      strA = strA + item;
    });
    b.forEach((item) => {
      strB = strB + item;
    });

    if (strA > strB) return 1;
    if (strA < strB) return -1;
    return 0;
  });

  return answer[0];
}
solution([
  ["ICN", "SFO"],
  ["ICN", "ATL"],
  ["SFO", "ATL"],
  ["ATL", "ICN"],
  ["ATL", "SFO"],
]);


코드 설명

  • [["ICN", "SFO"],["ICN", "ATL"],["SFO", "ATL"],["ATL", "ICN"],["ATL", "SFO"],]

다음 테스트 케이스는 여행경로가 총 세개 나온다.

  • 0->2->3->1->4
  • 1->3->0->2->4
  • 1->4->2->3->0

처음에 프로그래머스 문제설명란을 보고 해당 테스트케이스에서 여행경로가 두개나오는줄 알았다..(착각함)

다음과 같이 세 개의 여행경로가 나오면 문자열 비교를 수행하여 가장 문자열 값이 작은 문자열을 답으로 리턴해야함.

그래서 다음과 같이 sort하여 첫 번째 방의 값을 리턴하는 방식을 사용.

answer.sort((a, b) => {
    let strA = "";
    let strB = "";

    a.forEach((item) => {
      strA = strA + item;
    });
    b.forEach((item) => {
      strB = strB + item;
    });

    if (strA > strB) return 1;
    if (strA < strB) return -1;
    return 0;
  });
  • 자바스크립트로 문자열 두개를 비교연산자로 계산하면 사전 비교를 해준다.
profile
Frontend Ninja

0개의 댓글