๐ ๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/1446
1446๋ฒ: ์ง๋ฆ๊ธธ
์ฒซ์งธ ์ค์ ์ง๋ฆ๊ธธ์ ๊ฐ์ N๊ณผ ๊ณ ์๋๋ก์ ๊ธธ์ด D๊ฐ ์ฃผ์ด์ง๋ค. N์ 12 ์ดํ์ธ ์์ ์ ์์ด๊ณ , D๋ 10,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค. ๋ค์ N๊ฐ์ ์ค์ ์ง๋ฆ๊ธธ์ ์์ ์์น, ๋์ฐฉ ์์น, ์ง๋ฆ๊ธธ์ ๊ธธ์ด
www.acmicpc.net
โธ ๋ฌธ์
๋งค์ผ ์์นจ, ์ธ์ค์ด๋ ํ๊ต์ ๊ฐ๊ธฐ ์ํด์ ์ฐจ๋ฅผ ํ๊ณ Dํฌ๋ก๋ฏธํฐ ๊ธธ์ด์ ๊ณ ์๋๋ก๋ฅผ ์ง๋๋ค. ์ด ๊ณ ์๋๋ก๋ ์ฌ๊ฐํ๊ฒ ์ปค๋ธ๊ฐ ๋ง์์ ์ ๋ง ์ด์ ํ๊ธฐ๋ ํ๋ค๋ค. ์ด๋ ๋ , ์ธ์ค์ด๋ ์ด ๊ณ ์๋๋ก์ ์ง๋ฆ๊ธธ์ด ์กด์ฌํ๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค. ๋ชจ๋ ์ง๋ฆ๊ธธ์ ์ผ๋ฐฉํตํ์ด๊ณ , ๊ณ ์๋๋ก๋ฅผ ์ญ์ฃผํํ ์๋ ์๋ค.
์ธ์ค์ด๊ฐ ์ด์ ํด์ผ ํ๋ ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ์ ์ถ๋ ฅํ์์ค.
โธ ์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ง๋ฆ๊ธธ์ ๊ฐ์ N๊ณผ ๊ณ ์๋๋ก์ ๊ธธ์ด D๊ฐ ์ฃผ์ด์ง๋ค. N์ 12 ์ดํ์ธ ์์ ์ ์์ด๊ณ , D๋ 10,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค. ๋ค์ N๊ฐ์ ์ค์ ์ง๋ฆ๊ธธ์ ์์ ์์น, ๋์ฐฉ ์์น, ์ง๋ฆ๊ธธ์ ๊ธธ์ด๊ฐ ์ฃผ์ด์ง๋ค. ๋ชจ๋ ์์น์ ๊ธธ์ด๋ 10,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ด ์๋ ์ ์์ด๋ค. ์ง๋ฆ๊ธธ์ ์์ ์์น๋ ๋์ฐฉ ์์น๋ณด๋ค ์๋ค.
โธ ์ถ๋ ฅ
์ธ์ค์ด๊ฐ ์ด์ ํด์ผํ๋ ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ์ ์ถ๋ ฅํ์์ค.
๐ ๋ฌธ์ ์ ๋ณด
- ๐ฅ ๋ฌธ์ ๋ ๋ฒจ : ์ค๋ฒ 1
- ๐ ๋ฌธ์ ์ ํ : ๊ทธ๋ํ ์ด๋ก , ๋ฐ์ดํฌ์คํธ๋ผ, ์ต๋จ ๊ฒฝ๋ก
- ๐ฌ ํ์ด ์ธ์ด : JAVA
๐ค ๋ฌธ์ ํ์ด
- ์ง๋ฆ๊ธธ์ ๋ํ ์ ๋ณด๋ฅผ ์ธ์ ๋ฆฌ์คํธ์ ์ ์ฅํด ์ฃผ์๋๋ฐ,
- ์ด๋ ์ง๋ฆ๊ธธ์ด ๋ชฉํ์ง์ ์ ๋์ด์๊ฑฐ๋(์ญ์ฃผํ ๋ถ๊ฐ), ๊ธฐ์กด ๊ธธ๋ณด๋ค ๊ฑฐ๋ฆฌ๊ฐ ๊ธด ๊ฒฝ์ฐ๋ ์ ์ธํ๊ณ ๋ฆฌ์คํธ์ ์ ์ฅํ๋ค.
- dist ๋ฐฐ์ด์๋ ๊ฑฐ๋ฆฌ๋ฅผ ์์ ์ง์ ์์ 1์ฉ ์ฆ๊ฐํ๋ฉฐ ํด๋น ์ง์ ์ผ๋ก ๊ฐ๋ ์ง๋ฆ๊ธธ์ด ์์ ๋, ๋ ์งง๊ฒ ์ด๋ํ ์ ์๋ ๊ฒฝ์ฐ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐฑ์ ํ๋ค.
โ ์ต์ข ์ฝ๋
๋ฉ๋ชจ๋ฆฌ : 12564KB
์๊ฐ : 92ms
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main {
static int n, d;
static ArrayList<ArrayList<pos>> list;
static int[] dist;
static boolean[] checked;
static public class pos implements Comparable<pos> {
int end; int dist;
public pos(int end, int dist) {
this.end = end;
this.dist = dist;
}
@Override
public int compareTo(pos o) {
return this.dist - o.dist;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken()); // ์ง๋ฆ๊ธธ์ ๊ฐ์
d = Integer.parseInt(st.nextToken()); // ๊ณ ์๋๋ก์ ๊ธธ์ด
// ์ธ์ ๋ฆฌ์คํธ
list = new ArrayList<>();
for (int i = 0; i < 10001; i++) {
list.add(new ArrayList<>());
}
// ์ถ๋ฐ์ง์์ ์ต์ ๊ฑฐ๋ฆฌ ๊ธฐ๋ก
dist = new int[d+1];
Arrays.fill(dist, Integer.MAX_VALUE);
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken()); // ์์ ์์น
int end = Integer.parseInt(st.nextToken()); // ๋์ฐฉ ์์น
int dist = Integer.parseInt(st.nextToken()); // ์ง๋ฆ๊ธธ์ ๊ฑฐ๋ฆฌ
// ๋์ฐฉ ์์น๋ ๊ณ ์๋๋ก์ ๊ธธ์ด๋ฅผ ๋์ผ๋ฉด ์๋จ, ์ญ์ฃผํ ๋ถ๊ฐ
if (end > d) continue;
// ์ง๋ฆ๊ธธ์ด ๋ชจ๋ ์ต๋จ ๊ฑฐ๋ฆฌ๋ ์๋
// 110 -> 140, 90์ ์ง๋ฆ๊ธธ์ด ๋ ๋ฉ์
// ์ง๋ฆ๊ธธ์ธ ๊ฒฝ์ฐ์๋ง list ์ถ๊ฐ
if (end - start > dist) {
list.get(start).add(new pos(end, dist));
}
}
dijkstra(0);
bw.append(dist[d] + "\n");
bw.flush();
bw.close();
br.close();
}
private static void dijkstra(int end) {
PriorityQueue<pos> pq = new PriorityQueue<>();
pq.offer(new pos(end, 0));
checked = new boolean[d+1];
dist[end] = 0;
while (!pq.isEmpty()) {
pos now = pq.poll();
end = now.end;
checked[end] = true;
if (end == d) break; // ๋์ฐฉ
// ๊ฑฐ๋ฆฌ 1์ฉ ์ฆ๊ฐ
if (dist[end+1] > now.dist+1) {
dist[end+1] = now.dist+1;
pq.offer(new pos(end+1, dist[end+1]));
}
// ํด๋น ์ง์ ์ผ๋ก ๊ฐ๋ ์ง๋ฆ๊ธธ์ด ์๋ค๋ฉด
for (pos next : list.get(end)) {
// ๊ฐ์ค์น๊ฐ ๋ ์๋ค๋ฉด ๊ฐฑ์
if (!checked[next.end] && dist[next.end] > dist[end] + next.dist) {
dist[next.end] = dist[end] + next.dist;
pq.offer(new pos(next.end, dist[next.end]));
}
}
}
}
}
๐ ํจ๊ป ํ์ด๋ณด๋ฉด ์ข์ ๋ฐฑ์ค ๋ฌธ์
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Boj_2630] ์์ข ์ด ๋ง๋ค๊ธฐ (0) | 2023.11.24 |
---|---|
[Boj_20002] ์ฌ๊ณผ๋๋ฌด (0) | 2023.11.21 |
[Boj_1504] ํน์ ํ ์ต๋จ ๊ฒฝ๋ก (0) | 2023.11.21 |
[Boj_18352] ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ (1) | 2023.11.15 |
[Boj_11279] ์ต๋ ํ (0) | 2023.11.13 |