반응형
문제
https://www.acmicpc.net/problem/1446
1446번: 지름길
첫째 줄에 지름길의 개수 N과 고속도로의 길이 D가 주어진다. N은 12 이하인 양의 정수이고, D는 10,000보다 작거나 같은 자연수이다. 다음 N개의 줄에 지름길의 시작 위치, 도착 위치, 지름길의 길이
www.acmicpc.net
JAVA코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main {
static int N, D;
static int[] dp;
public static void main(String[] args) throws IOException {
// Input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
D = Integer.parseInt(st.nextToken());
PriorityQueue<Road> pq = new PriorityQueue<>();
int s = 0;
int e = 0;
int d = 0;
for (int idx = 0; idx < N; idx++) {
st = new StringTokenizer(br.readLine());
s = Integer.parseInt(st.nextToken());
e = Integer.parseInt(st.nextToken());
d = Integer.parseInt(st.nextToken());
if (e > D)
continue;
pq.offer(new Road(s, e, d));
}
dp = new int[D + 1];
for (int idx = 0; idx <= D; idx++) {
dp[idx] = idx;
}
while (!pq.isEmpty()) {
Road road = pq.poll();
if ((dp[road.start] + road.dis) < dp[road.end]) {
dp[road.end] = dp[road.start] + road.dis;
for (int idx = 0; idx < D; idx++) {
if (dp[idx + 1] > dp[idx] + 1) {
dp[idx + 1] = dp[idx] + 1;
}
}
}
}
System.out.println(dp[D]);
}
public static class Road implements Comparable<Road> {
private int start;
private int end;
private int dis;
public Road(int start, int end, int dis) {
this.start = start;
this.end = end;
this.dis = dis;
}
public int getStart() {
return start;
}
public int getEnd() {
return end;
}
public int getDis() {
return dis;
}
@Override
public int compareTo(Road o) {
if (this.start > o.start)
return 1;
else if (this.start < o.start)
return -1;
else if (this.start == o.start) {
if (this.end > o.end)
return 1;
else if (this.end < o.end)
return -1;
else if (this.end > o.end) {
if (this.dis > o.dis)
return 1;
else
return -1;
}
}
return -1;
}
}
}
반응형
'Algorithm > 문제 풀이' 카테고리의 다른 글
[BAEKJOON_2531 - JAVA] 회전 초밥 (0) | 2023.06.22 |
---|---|
[BAEKJOON_19637 - JAVA] IF문 좀 대신 써줘 (0) | 2023.06.17 |
[BAEKJOON_14503 -JAVA] 로봇 청소기 (0) | 2023.06.16 |
[BAEKJOON_15723 - JAVA] n단 논법 (0) | 2023.06.16 |
[BAEKJOON_11726 - JAVA] 2×n 타일링 (0) | 2022.12.07 |