https://www.acmicpc.net/problem/17396

0 -> N까지의 최단경로를 구할 때, 갈 수 없는 정점을 피하며 갈 경우의 최단 경로를 구하는 문제이다.
정점 개수랑 가중치 범위를 제대로 안보고 가중치 배열을 int로 잡았다가 한번 틀렸다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.PriorityQueue;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] info = getArray(br.readLine());
int[] sight = getArray(br.readLine());
List<List<Roads>> list = new ArrayList<>();
for (int i = 0; i < info[0]; i++) {
list.add(new ArrayList<>());
}
for (int i = 0; i < info[1]; i++) {
int[] road = getArray(br.readLine());
list.get(road[0]).add(new Roads(road[1],road[2]));
list.get(road[1]).add(new Roads(road[0],road[2]));
}
double[] dist = new double[info[0]];
Arrays.fill(dist,100000d*300000d);
dist[0] = 0;
boolean[] visited = new boolean[info[0]];
PriorityQueue<Spot> pq = new PriorityQueue<>();
Spot start = new Spot(0);
pq.offer(start);
while(!pq.isEmpty()){
Spot s = pq.poll();
int v = s.v;
double weight = dist[v];
if(visited[v]) continue;
visited[v] = true;
List<Roads> rList = list.get(v);
for (int i = 0; i < rList.size(); i++) {
Roads r = rList.get(i);
if(sight[r.to]==1&&r.to!= sight.length-1) continue;
if(dist[r.to]> weight + r.cost){
dist[r.to] = weight + r.cost;
Spot offer = new Spot(r.to);
offer.weight = dist[r.to];
pq.offer(offer);
}
}
}
double answer = dist[sight.length-1]==100000d*300000d?-1:dist[sight.length-1];
System.out.printf("%.0f",answer);
}
static int par(String s) {
return Integer.parseInt(s);
}
static int[] getArray(String s) {
return Arrays.stream(s.split(" ")).mapToInt(Integer::parseInt).toArray();
}
}
class Spot implements Comparable<Spot>{
int v;
double weight = 0;
Spot(int v){
this.v=v;
}
@Override
public int compareTo(Spot o) {
return Double.compare(this.weight,o.weight);
}
}
class Roads{
int to;
int cost;
Roads(int t, int c){
this.to = t;
this.cost = c;
}
}'백준' 카테고리의 다른 글
| [JAVA] 백준 10282 - 해킹 (0) | 2025.10.06 |
|---|---|
| [JAVA] 백준 20168 - 골목 대장 호석 - 기능성 (0) | 2025.10.05 |
| [JAVA] 백준 14284 - 간선 이어가기 2 (0) | 2025.10.05 |
| [JAVA] 백준 9505 - 엔터프라이즈호 탈출 (0) | 2025.10.04 |
| [JAVA] 백준 2665 - 미로만들기 (0) | 2025.10.04 |