본문 바로가기
  • 살짝 구운 김 유나
Algorithm/Programmers

[Lv.3] 여행 경로 - JavaScript

by yunae 2023. 3. 11.

문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

코드

function solution(tickets) {
  var answer = [];
  const len = tickets.length;
  const visited = new Array(len).fill(false);

  // 티켓 정렬 -> 여러 경로가 있을 때 첫번째 나온 결과를 정답으로 선택
  tickets.sort();

  function dfs(str, path, depth) {
    // answer의 길이가 0 == 처음 완성된 경로
    if (depth === len && answer.length === 0) {
      // 지금까지의 경로를 answer에 저장
      answer = path
      return;
    }

    for (let i = 0; i < len; i++) {
      // 방문한 적이 있다면 continue
      if (visited[i]) continue;
      // 방문한 적이 없고 현재 지역와 출발 지역이 같은 티켓을 선택
      if (!visited[i] && str === tickets[i][0]) {
        // 방문처리 해주기
        visited[i] = true;
        dfs(tickets[i][1], [...path, tickets[i][1]], depth+1);
        // 여러 경로가 존재할 수 있기 때문에 다시 false로 복원 시켜줌
        visited[i] = false;
      }
    }
  }

  // 인천 공항에서 출발
  dfs("ICN",["ICN"] ,0);

  return answer;
}

 

💡What I Learned

array.sort()

JS 에서 문자열로 이루어진 이차원 배열을 정렬할 때,

1.  첫번째 원소를 기준으로 오름차순 정렬

2. 첫번째 원소의 문자열이 같다면 두번째 원소를 기준으로 오름차순 정렬

위의 두가지 조건을 알아서 적용해준다.

tickets.sort()

tickets 배열을 정렬하기 위해서 별도의 조건 없이 위의 코드만 작성해주면 된다...!

 

 

 

댓글