문제 링크
양방향 그래프에서 시작 점으로부터 더 이상 갈 수 없을 때까지 이동한 뒤 출력하면 되는 문제다.
접근법
양방향 그래프이기 때문에 그래프를 만들 때 좌우 둘 다 추가해 준다.
각 정점에서 방문하지 않았던 번호가 낮은 노드로 이동하기 때문에 각 정점의 값은 정렬되어 있어야 한다.
유의. 자바스크립트에서 sort
함수에 비교함수 콜백을 작성하지 않으면 ASCII값을 기준으로 정렬한다.
따라서 "문자"로 비교하기 때문에 30
, 100
, 200
이 아닌 첫 번째 문자의 아스키 값의 우선순위에 따라 100
, 200
, 30
이 출력된다.
따라서 비교 함수 콜백을 통해 정렬의 우선순위를 먼저 지정해야 한다.
- 콜백 함수의 리턴값이 0보다 작은 경우(음수) a를 b보다 낮은 인덱스로 정렬한다(a가 먼저 오므로 오름차순이 됨).
- 콜백 함수의 리턴값이 0인 경우 a와 b를 서로 변경하지 않고 다른 요소에 대해 정렬한다(현재 두 값으로는 비교 X).
- 콜백 함수의 리턴값이 0보다 큰 경우(양수) a를 b보다 높은 인덱스로 정렬한다(b가 먼저 오므로 내림차순이 됨).
방문한 횟수는 방문(메모) 배열에 값을 추가해 나가다 마지막에 배열 길이를 출력하면 된다.
정리
- 양방향 그래프를 그린다.
- 메모 배열을 활용해 방문 시 체크해 준다.
- 마지막 노드와 메모 배열의 길이를 출력한다.
sort
함수는 문자(ASCII)를 기준으로 정렬하기 때문에 유의해야 한다.
최종 코드