난이도 | 풀이 시간 | 시간 제한 | 메모리 제한 |
---|---|---|---|
1.5 | 30분 | 2초 | 256MB |
어떤 나라에는 1~N번까지의 도시와 M개의 단방향 도로가 존재합니다. 모든 도로의 거리는 1입니다. 이때 특정한 도시 X로부터 출발하여 도달할 수 있는 모든 도시 중에서 최단 거리가 정확히 K인 모든 도시의 번호를 출력하는 프로그램을 작성하세요. 또한 출발 도시 X에서 출발 도시 X로 가는 최단 거리는 항상 0이라고 가정합니다.
예를 들어 N = 4, K = 2, X = 1일 때 다음과 같이 그래프가 구성되어 있다고 합시다.
이때 1번 도시에서 출발하여 도달할 수 있는 도시 중에서, 최단 거리가 2인 도시는 4번 도시뿐입니다. 2번과 3번 도서의 경우, 최단 거리가 1이기 때문에 출력하지 않습니다.
4 4 2 1
1 2
1 3
2 3
2 4
4
function solution(N, M, K, X, city) {
const graph = new Array(N).fill([]);
city.split('\n').forEach(c => {
const path = c.split(' ');
const i = Number(path[0]) - 1;
const j = Number(path[1]) - 1;
graph[i] = [...graph[i], j];
});
const queue = [];
queue.push(X-1);
const distance = new Array(N).fill(-1);
distance[X-1] = 0;
while (queue.length !== 0) {
const i = queue.shift();
for (let j of graph[i]) {
if (distance[j] === -1) {
distance[j] = distance[i] + 1;
queue.push(j);
}
}
}
const answer = [];
for (let i = 0; i < distance.length; i++) {
if (distance[i] === K) {
answer.push(i + 1);
}
}
if (answer.length === 0) {
return -1;
}
answer.sort((a, b) => a - b);
for (let a of answer) {
console.log(a);
}
}
solution(4, 4, 2, 1, '1 2\n1 3\n2 3\n2 4');
다익스트라 최단거리를 먼저 생각할법한 문제인데, 모든 거리가 1로 고정이기 때문에 좀 더 효율적으로 풀리는 BFS를 사용할 수도 있다는 것을 알게 되었다.
물론 어려워서 정답을 보고 풀었다...