FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
python-for-coding-test/9/1.java at master · ndb796/python-for-coding-test · GitHub
ndb796
/
python-for-coding-test
Public
Notifications
You must be signed in to change notification settings
Fork
831
Star
2.4k
Code
Issues
129
Pull requests
1
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
python-for-coding-test
/
9
/
1.java
Copy path
More file actions
More file actions
Latest commit
History
History
History
110 lines (94 loc) · 3.68 KB
Breadcrumbs
python-for-coding-test
/
9
/
1.java
Copy path
File metadata and controls
110 lines (94 loc) · 3.68 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import
java
.
util
.*;
class
Node
{
private
int
index
;
private
int
distance
;
public
Node
(
int
index
,
int
distance
) {
this
.
index
=
index
;
this
.
distance
=
distance
;
}
public
int
getIndex
() {
return
this
.
index
;
}
public
int
getDistance
() {
return
this
.
distance
;
}
}
public
class
Main
{
public
static
final
int
INF
= (
int
)
1e9
;
// 무한을 의미하는 값으로 10억을 설정
// 노드의 개수(N), 간선의 개수(M), 시작 노드 번호(Start)
// 노드의 개수는 최대 100,000개라고 가정
public
static
int
n
,
m
,
start
;
// 각 노드에 연결되어 있는 노드에 대한 정보를 담는 배열
public
static
ArrayList
<
ArrayList
<
Node
>>
graph
=
new
ArrayList
<
ArrayList
<
Node
>>();
// 방문한 적이 있는지 체크하는 목적의 배열 만들기
public
static
boolean
[]
visited
=
new
boolean
[
100001
];
// 최단 거리 테이블 만들기
public
static
int
[]
d
=
new
int
[
100001
];
// 방문하지 않은 노드 중에서, 가장 최단 거리가 짧은 노드의 번호를 반환
public
static
int
getSmallestNode
() {
int
min_value
=
INF
;
int
index
=
0
;
// 가장 최단 거리가 짧은 노드(인덱스)
for
(
int
i
=
1
;
i
<=
n
;
i
++) {
if
(
d
[
i
] <
min_value
&& !
visited
[
i
]) {
min_value
=
d
[
i
];
index
=
i
;
}
}
return
index
;
}
public
static
void
dijkstra
(
int
start
) {
// 시작 노드에 대해서 초기화
d
[
start
] =
0
;
visited
[
start
] =
true
;
for
(
int
j
=
0
;
j
<
graph
.
get
(
start
).
size
();
j
++) {
d
[
graph
.
get
(
start
).
get
(
j
).
getIndex
()] =
graph
.
get
(
start
).
get
(
j
).
getDistance
();
}
// 시작 노드를 제외한 전체 n - 1개의 노드에 대해 반복
for
(
int
i
=
0
;
i
<
n
-
1
;
i
++) {
// 현재 최단 거리가 가장 짧은 노드를 꺼내서, 방문 처리
int
now
=
getSmallestNode
();
visited
[
now
] =
true
;
// 현재 노드와 연결된 다른 노드를 확인
for
(
int
j
=
0
;
j
<
graph
.
get
(
now
).
size
();
j
++) {
int
cost
=
d
[
now
] +
graph
.
get
(
now
).
get
(
j
).
getDistance
();
// 현재 노드를 거쳐서 다른 노드로 이동하는 거리가 더 짧은 경우
if
(
cost
<
d
[
graph
.
get
(
now
).
get
(
j
).
getIndex
()]) {
d
[
graph
.
get
(
now
).
get
(
j
).
getIndex
()] =
cost
;
}
}
}
}
public
static
void
main
(
String
[]
args
) {
Scanner
sc
=
new
Scanner
(
System
.
in
);
n
=
sc
.
nextInt
();
m
=
sc
.
nextInt
();
start
=
sc
.
nextInt
();
// 그래프 초기화
for
(
int
i
=
0
;
i
<=
n
;
i
++) {
graph
.
add
(
new
ArrayList
<
Node
>());
}
// 모든 간선 정보를 입력받기
for
(
int
i
=
0
;
i
<
m
;
i
++) {
int
a
=
sc
.
nextInt
();
int
b
=
sc
.
nextInt
();
int
c
=
sc
.
nextInt
();
// a번 노드에서 b번 노드로 가는 비용이 c라는 의미
graph
.
get
(
a
).
add
(
new
Node
(
b
,
c
));
}
// 최단 거리 테이블을 모두 무한으로 초기화
Arrays
.
fill
(
d
,
INF
);
// 다익스트라 알고리즘을 수행
dijkstra
(
start
);
// 모든 노드로 가기 위한 최단 거리를 출력
for
(
int
i
=
1
;
i
<=
n
;
i
++) {
// 도달할 수 없는 경우, 무한(INFINITY)이라고 출력
if
(
d
[
i
] ==
INF
) {
System
.
out
.
println
(
"INFINITY"
);
}
// 도달할 수 있는 경우 거리를 출력
else
{
System
.
out
.
println
(
d
[
i
]);
}
}
}
}
Back
|
FazBrowse Home
|
New Git URL