Skip to content

Commit bc1e3a5

Browse files
committed
[Gold V] Title: 노드사이의 거리, Time: 292 ms, Memory: 15356 KB -BaekjoonHub
1 parent 5138c70 commit bc1e3a5

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# [Gold V] 노드사이의 거리 - 1240
2+
3+
[문제 링크](https://www.acmicpc.net/problem/1240)
4+
5+
### 성능 요약
6+
7+
메모리: 15356 KB, 시간: 292 ms
8+
9+
### 분류
10+
11+
너비 우선 탐색, 깊이 우선 탐색, 그래프 이론, 그래프 탐색, 트리
12+
13+
### 제출 일자
14+
15+
2025년 2월 20일 17:39:05
16+
17+
### 문제 설명
18+
19+
<p><mjx-container class="MathJax" jax="CHTML" style="font-size: 109%; position: relative;"> <mjx-math class="MJX-TEX" aria-hidden="true"><mjx-mi class="mjx-i"><mjx-c class="mjx-c1D441 TEX-I"></mjx-c></mjx-mi></mjx-math><mjx-assistive-mml unselectable="on" display="inline"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>N</mi></math></mjx-assistive-mml><span aria-hidden="true" class="no-mathjax mjx-copytext">$N$</span></mjx-container>개의 노드로 이루어진 트리가 주어지고 M개의 두 노드 쌍을 입력받을 때 두 노드 사이의 거리를 출력하라.</p>
20+
21+
### 입력
22+
23+
<p>첫째 줄에 노드의 개수 <mjx-container class="MathJax" jax="CHTML" style="font-size: 109%; position: relative;"><mjx-math class="MJX-TEX" aria-hidden="true"><mjx-mi class="mjx-i"><mjx-c class="mjx-c1D441 TEX-I"></mjx-c></mjx-mi></mjx-math><mjx-assistive-mml unselectable="on" display="inline"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>N</mi></math></mjx-assistive-mml><span aria-hidden="true" class="no-mathjax mjx-copytext">$N$</span></mjx-container>과 거리를 알고 싶은 노드 쌍의 개수 <mjx-container class="MathJax" jax="CHTML" style="font-size: 109%; position: relative;"><mjx-math class="MJX-TEX" aria-hidden="true"><mjx-mi class="mjx-i"><mjx-c class="mjx-c1D440 TEX-I"></mjx-c></mjx-mi></mjx-math><mjx-assistive-mml unselectable="on" display="inline"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>M</mi></math></mjx-assistive-mml><span aria-hidden="true" class="no-mathjax mjx-copytext">$M$</span></mjx-container>이 입력되고 다음 <mjx-container class="MathJax" jax="CHTML" style="font-size: 109%; position: relative;"><mjx-math class="MJX-TEX" aria-hidden="true"><mjx-mi class="mjx-i"><mjx-c class="mjx-c1D441 TEX-I"></mjx-c></mjx-mi><mjx-mo class="mjx-n" space="3"><mjx-c class="mjx-c2212"></mjx-c></mjx-mo><mjx-mn class="mjx-n" space="3"><mjx-c class="mjx-c31"></mjx-c></mjx-mn></mjx-math><mjx-assistive-mml unselectable="on" display="inline"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>N</mi><mo>−</mo><mn>1</mn></math></mjx-assistive-mml><span aria-hidden="true" class="no-mathjax mjx-copytext">$N-1$</span></mjx-container>개의 줄에 트리 상에 연결된 두 점과 거리를 입력받는다. 그 다음 줄에는 거리를 알고 싶은 <mjx-container class="MathJax" jax="CHTML" style="font-size: 109%; position: relative;"><mjx-math class="MJX-TEX" aria-hidden="true"><mjx-mi class="mjx-i"><mjx-c class="mjx-c1D440 TEX-I"></mjx-c></mjx-mi></mjx-math><mjx-assistive-mml unselectable="on" display="inline"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>M</mi></math></mjx-assistive-mml><span aria-hidden="true" class="no-mathjax mjx-copytext">$M$</span></mjx-container>개의 노드 쌍이 한 줄에 한 쌍씩 입력된다.</p>
24+
25+
### 출력
26+
27+
<p><mjx-container class="MathJax" jax="CHTML" style="font-size: 109%; position: relative;"> <mjx-math class="MJX-TEX" aria-hidden="true"><mjx-mi class="mjx-i"><mjx-c class="mjx-c1D440 TEX-I"></mjx-c></mjx-mi></mjx-math><mjx-assistive-mml unselectable="on" display="inline"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>M</mi></math></mjx-assistive-mml><span aria-hidden="true" class="no-mathjax mjx-copytext">$M$</span></mjx-container>개의 줄에 차례대로 입력받은 두 노드 사이의 거리를 출력한다.</p>
28+
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
let fs = require('fs');
2+
let input = fs.readFileSync('/dev/stdin').toString().split('\n');
3+
4+
let [n, m] = input[0].split(' ').map(Number);
5+
let graph = [];
6+
for (let i = 1; i <= n; i++) graph[i] = [];
7+
for (let i = 1; i < n; i++) {
8+
let [x, y, cost] = input[i].split(' ').map(Number);
9+
graph[x].push([y, cost]);
10+
graph[y].push([x, cost]);
11+
}
12+
13+
function dfs(x, dist) {
14+
if (visited[x]) return;
15+
visited[x] = true;
16+
distance[x] = dist;
17+
for (let [y, cost] of graph[x]) dfs(y, dist + cost);
18+
}
19+
20+
for (let i = 0; i < m; i++) {
21+
let [x, y] = input[n + i].split(' ').map(Number);
22+
visited = new Array(n + 1).fill(false);
23+
distance = new Array(n + 1).fill(-1);
24+
dfs(x, 0);
25+
console.log(distance[y]);
26+
}
27+
28+
// 양방향 간선
29+
// 각 요청마다 dfs 실행
30+
// 출발지에서 목적지까지 가는데 같은 길을 다시 가는 경우는 없음 => DFS 가능
31+
// 각 x에서 모든 y 끝까지 얼마의 비용이 전부 들어가는지 조사
32+
// 하나만 특정해서 구하는거보다 그냥 전부 DFS 돌려서 구한다음 필요한거 쓰는게 더 편함

0 commit comments

Comments
 (0)