FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
python-for-coding-test/17/3.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
830
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
/
17
/
3.java
Copy path
More file actions
More file actions
Latest commit
History
History
History
98 lines (83 loc) · 3.17 KB
Breadcrumbs
python-for-coding-test
/
17
/
3.java
Copy path
File metadata and controls
98 lines (83 loc) · 3.17 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
import
java
.
util
.*;
class
Node
implements
Comparable
<
Node
> {
private
int
x
;
private
int
y
;
private
int
distance
;
public
Node
(
int
x
,
int
y
,
int
distance
) {
this
.
x
=
x
;
this
.
y
=
y
;
this
.
distance
=
distance
;
}
public
int
getX
() {
return
this
.
x
;
}
public
int
getY
() {
return
this
.
y
;
}
public
int
getDistance
() {
return
this
.
distance
;
}
// 거리(비용)가 짧은 것이 높은 우선순위를 가지도록 설정
@
Override
public
int
compareTo
(
Node
other
) {
if
(
this
.
distance
<
other
.
distance
) {
return
-
1
;
}
return
1
;
}
}
public
class
Main
{
public
static
final
int
INF
= (
int
)
1e9
;
// 무한을 의미하는 값으로 10억을 설정
public
static
int
[][]
graph
=
new
int
[
125
][
125
];
public
static
int
[][]
d
=
new
int
[
125
][
125
];
public
static
int
testCase
,
n
;
public
static
int
[]
dx
= {-
1
,
0
,
1
,
0
};
public
static
int
[]
dy
= {
0
,
1
,
0
, -
1
};
public
static
void
main
(
String
[]
args
) {
Scanner
sc
=
new
Scanner
(
System
.
in
);
testCase
=
sc
.
nextInt
();
// 전체 테스트 케이스(Test Case)만큼 반복
for
(
int
tc
=
0
;
tc
<
testCase
;
tc
++) {
// 노드의 개수를 입력받기
n
=
sc
.
nextInt
();
// 전체 맵 정보를 입력받기
for
(
int
i
=
0
;
i
<
n
;
i
++) {
for
(
int
j
=
0
;
j
<
n
;
j
++) {
graph
[
i
][
j
] =
sc
.
nextInt
();
}
}
// 최단 거리 테이블을 모두 무한으로 초기화
for
(
int
i
=
0
;
i
<
n
;
i
++) {
Arrays
.
fill
(
d
[
i
],
INF
);
}
int
x
=
0
,
y
=
0
;
// 시작 위치는 (0, 0)
// 시작 노드로 가기 위한 최단 경로는 0으로 설정하여, 큐에 삽입
PriorityQueue
<
Node
>
pq
=
new
PriorityQueue
<>();
pq
.
offer
(
new
Node
(
0
,
0
,
graph
[
x
][
y
]));
d
[
x
][
y
] =
graph
[
x
][
y
];
while
(!
pq
.
isEmpty
()) {
// 다익스트라 알고리즘을 수행
// 가장 최단 거리가 짧은 노드에 대한 정보 꺼내기
Node
node
=
pq
.
poll
();
int
dist
=
node
.
getDistance
();
x
=
node
.
getX
();
y
=
node
.
getY
();
// 현재 노드가 이미 처리된 적이 있는 노드라면 무시
if
(
d
[
x
][
y
] <
dist
)
continue
;
// 현재 노드와 연결된 다른 인접한 노드들을 확인
for
(
int
i
=
0
;
i
<
4
;
i
++) {
int
nx
=
x
+
dx
[
i
];
int
ny
=
y
+
dy
[
i
];
// 맵의 범위를 벗어나는 경우 무시
if
(
nx
<
0
||
nx
>=
n
||
ny
<
0
||
ny
>=
n
)
continue
;
int
cost
=
dist
+
graph
[
nx
][
ny
];
// 현재 노드를 거쳐서, 다른 노드로 이동하는 거리가 더 짧은 경우
if
(
cost
<
d
[
nx
][
ny
]) {
d
[
nx
][
ny
] =
cost
;
pq
.
offer
(
new
Node
(
nx
,
ny
,
cost
));
}
}
}
System
.
out
.
println
(
d
[
n
-
1
][
n
-
1
]);
}
}
}
Back
|
FazBrowse Home
|
New Git URL