1. 문제에 대한 이해
- 우리가 풀어야 할 문제는 무엇인가?
- 방문 판매원 A가 1번에서 시작해 K번 회사를 거쳐 X번 회사로 가는 최소 이동 시간을 구하라 - 주어진 자료는 무엇인가?
- M = 경로를 나타낸 배열
- X = 정수
- K = 정수 - 조건은 무엇인가?
- 만약 X번 회사에 도달할 수 없다면 -1을 출력한다
2. 계획
- 1번에서 K번까지 가는 최단 경로를 구하라
- K에서 X번까지 가는 최단 경로를 구하라
- 이 둘을 더해서 리턴
3. 실행
- 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
const solution = (route, K, X) => {
let count = 0;
// 1번에서 K번까지 가는 최단 경로를 구하라
const arr = route.filter(it => it[0] === 1);
let kRoute = [];
if (arr.some((it) => it[1] === K)) {
count++
} else {
for (i = 0; i < arr.length; i++) {
kRoute.push(route.filter(it => it[0] === arr[i][1]))
}
count++
}
if (kRoute.length === 0) {
return -1
}
const routeK = kRoute.reduce((acc, cur) => [...acc, ...cur]);
if (routeK.some((it) => it[1] === K)) {
count++
}
// K에서 X번까지 가는 최단 경로를 구하라
let xRoute = [];
if (route.some((it) => it[0] === K)) {
xRoute.push(route.filter((it) => it[0] === K))
} else {
xRoute.push(route.filter((it) => it[1] === K))
}
const routeX = xRoute.reduce((acc, cur) => [...acc, ...cur]);
if (routeX.some((it) => it[0] === X || it[1] === X)) {
count++
}
return count
};
test('countMoney', () => {
expect(solution([[1, 2], [1, 3], [1, 4], [2, 4], [3, 4], [3, 5], [4, 5]], 5, 4)).toEqual(3);
expect(solution([[1, 3], [2, 4]], 3, 4)).toEqual(-1);
});
4. 반성
- 문제 해설에서 말한 것처럼 플로이드 워셜 알고리즘을 이용해서 해결할 수 있다.
'코테연습' 카테고리의 다른 글
113. 백준 : 2960 에라토스테네스의 체 Javascript (0) | 2022.09.09 |
---|---|
111. 백준 : 2839 설탕 배달 Javascript (0) | 2022.09.08 |
106. 이것이 코딩 테스트다 8장 : 효율적인 화폐 구성 Javascript (0) | 2022.09.04 |
104. 이것이 코딩 테스트다 8장 : 개미 전사 Javascript (0) | 2022.09.04 |
103. 이것이 코딩 테스트다 8장 : 1로 만들기 Javascript (0) | 2022.09.04 |
댓글