Tags
- ๊ทธ๋ํ ์ด๋ก
- ์ํ
- Python
- greedy
- BFS
- Java
- ๋ฐฑํธ๋ํน
- ๋ฌธ์์ด
- LV2
- ์ ๋ ฌ
- PGM
- ๊ทธ๋ํ ํ์
- ๊น์ด ์ฐ์ ํ์
- ๋๋น ์ฐ์ ํ์
- ์๋ฎฌ๋ ์ด์
- Brute Force Algorithm
- queue
- DP
- dfs
- stack
- ์๋ฃ๊ตฌ์กฐ
- Study
- CodingTest
- ๊ตฌํ
- ๊ต์ฌ
- sort
- BOJ
- Dynamic Programming
- ์ ์๋ก
- SpringBoot
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_11779 : ์ต์๋น์ฉ ๊ตฌํ๊ธฐ 2 ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- n๊ฐ์ ๋ ธ๋์ m๊ฐ์ ๋จ๋ฐฉํฅ ๊ฐ์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค.
- ์์ ๋
ธ๋๋ถํฐ ๋ชฉ์ ์ง ๋
ธ๋๊น์ง์ ๊ฒฝ๋ก ์ค ๋น์ฉ์ด ์ต์๊ฐ์ด ๋๋ ๊ฒฝ๋ก๋ฅผ ์ฐพ์, ๋น์ฉ๊ณผ ๊ฒฝ๋ก ์์ ๋
ธ๋ ์ ๋ฐ ๊ฒฝ๋ก๋ฅผ ์ถ๋ ฅํ๋ค.
- ๊ฐ์ ์ต์๊ฐ์ด๋ฉด์ ๋ค๋ฅธ ๊ฒฝ๋ก์ผ ์ ์๋๋ฐ, ๋ชจ๋ ์ ๋ต์ผ๋ก ์ธ์ ๋๋ค.
๐ธ ๋ฌธ์ ํ์ด ๐ธ
- ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ต๋จ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ค.
- ๋น์ฉ์ ์ต์๊ฐ ๋ฟ๋ง ์๋๋ผ ์ต๋จ๊ฒฝ๋ก๋ฅผ ์ถ๋ ฅํด์ผ ํ๋ฏ๋ก, ๊ฐ์ด ๊ฒฝ์ ๋ ๋ ์ด์ ์ถ๋ฐ ๋ ธ๋์ ๋ฒํธ๋ฅผ ์ ์ฅํ๋ค.
- ๋ชจ๋ ๊ณ์ฐ ์ดํ, ์ต์ข ๋ชฉ์ ์ง ๋ ธ๋๋ถํฐ ์์ ๋ ธ๋๋ก ์ญํํ๋ฉฐ ๊ฒฝ๋ก๋ฅผ ํ์ํ๋ค.
- ์ต์ ๋น์ฉ, ๊ฒฝ๋ก ์์ ๋ ธ๋ ์, ๊ฒฝ๋ก๋ฅผ ์ถ๋ ฅํ๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.io.*;
import java.util.ArrayList;
import java.util.PriorityQueue;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
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 = null;
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
int m = Integer.parseInt(br.readLine());
ArrayList<Edge>[] adjlist = new ArrayList[n + 1];
Edge[] node = new Edge[n + 1];
for (int i = 1; i <= n; i++) {
node[i] = new Edge(0, i, Integer.MAX_VALUE);
adjlist[i] = new ArrayList<>();
}
for (int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
int cost = Integer.parseInt(st.nextToken());
adjlist[start].add(new Edge(start, end, cost));
}
st = new StringTokenizer(br.readLine());
int first = Integer.parseInt(st.nextToken());
int last = Integer.parseInt(st.nextToken());
PriorityQueue<Edge> pq = new PriorityQueue<>();
pq.add(new Edge(0, first, 0));
while (!pq.isEmpty()) {
Edge edge = pq.poll();
if (edge.cost < node[edge.end].cost) {
node[edge.end] = edge;
} else continue;
for (Edge e : adjlist[edge.end]) {
if (edge.cost + e.cost < node[e.end].cost) {
pq.add(new Edge(e.start, e.end, e.cost + edge.cost));
}
}
}
sb.append(node[last].cost).append('\n');
int now = last;
Stack<Integer> stack = new Stack<>();
stack.push(now);
while (now != first) {
now = node[now].start;
stack.push(now);
}
sb.append(stack.size()).append('\n');
while (!stack.isEmpty()) {
sb.append(stack.pop()).append(' ');
}
bw.write(sb.toString());
bw.flush();
}
private static class Edge implements Comparable<Edge> {
int start;
int end;
int cost;
public Edge(int start, int end, int cost) {
this.start = start;
this.end = end;
this.cost = cost;
}
@Override
public int compareTo(Edge o) {
return this.cost - o.cost;
}
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ์์ ๋ ธ๋, ๋์ฐฉ ๋ ธ๋, ๋น์ฉ์ ์ ์ฅํ๊ณ ํ์ฉํ Edge ํด๋์ค๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ค.
- ArrayList ๋ฐฐ์ด์ธ adjlist์ ๋ ธ๋ ๋ณ ๊ฒฝ๋ก๋ฅผ Edge๋ก ์ ๋ ฅ๋ฐ์ ์ ์ฅํ๋ค.
- ๊ฐ ๋ ธ๋์ ์ต์ ๋น์ฉ์ Edge ๋ฐฐ์ด์ธ node์ ์ ์ฅํ๋ค.
- ์ฐ์ ์์ ํ์ 1๋ฒ๋
ธ๋๋ฅผ ๋ฃ๋ ๊ฒ์ ์์์ผ๋ก ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์คํํ๋ค.
- ์ฐ์ ์์ ํ์์ ๋์จ ๋น์ฉ์ด ํ์ฌ ์ ์ฅ๋ ์ต์๊ฐ ๋ณด๋ค ์์ผ๋ฉด, ๊ฐ์ ๊ฐฑ์ ํ๋ค.
- ๊ฐฑ์ ๋์ง ์์ผ๋ฉด ๋ค์ ์์๋ฅผ ํ์ธํ๊ณ , ๊ฐฑ์ ๋์์ผ๋ฉด ์ฐ๊ฒฐ๋ ๊ฒฝ๋ก๋ฅผ ๋ค์ ํ์ธํ ์ ์๋๋ก ์ฐ์ ์์ ํ์ ๋ฃ๋๋ค.
- ๋ชจ๋ ๊ณ์ฐ์ด ๋๋ ํ, ์ต์ข
์ผ๋ก ๊ณ์ฐ๋ ์ต์ ๋น์ฉ, ๊ฒฝ๋ก ์, ๊ฒฝ๋ก๋ฅผ ์ถ๋ ฅํ๋ค.
- ๊ฒฝ๋ก๋ Stack์ ๋ด์ผ๋ฉฐ ์ญ์ํ ํ๋ค๊ฐ, ์์ ๋ ธ๋๋ฅผ ๋ง๋๋ฉด Stack์์๋ฅผ ๊บผ๋ด๋ฉฐ Stringbuilder์ ๋ด์ ์ถ๋ ฅํ๋ค.
๐ธ end ๐ธ
- 45๋ฒ์งธ ์ค์ else continue ๋ถ๋ถ์ ์ฐ์ง ์์์, ๊ฐฑ์ ๋์ง ์์ ๋
ธ๋๋ ๋ค์ ํ์ํ๊ฒ ๋์๋๋ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฌ๋ค.
- ์ด ํจ์จ์ฑ ๋ถ๋ถ์ ์๊ฐํ๊ธด ํ๋๋ฐ, ์ง์ค์ด ํ๋ ค์ ธ์ ๋๋ฝํ๊ณ ๋์ด๊ฐ๋ ๊ฒ ๊ฐ๋ค.
- ์๋ ์ด์ ๋ ธ๋๋ฅผ ์ ์ฅํ๊ณ , ์ญ์ํ ํ๋ ๊ฒ ์๋๋ผ ํ, Stringbuilder, Arraylist๋ฅผ ์๊ฐํ๋ค๊ฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํฐ์ง ๊ฒ ๊ฐ์ ๊ณ ๋ฏผํ๋ค ๋ณด๋ ์ง์ค์ด ํ๋ ค์ก๋ค.
- ๊ฒฐ๊ณผ๋ ์ด์ ๋ ธ๋ ์ ์ฅ์ด๋ผ๋ ๊ฐ๋จํ ์๋ฃจ์ ์ผ๋ก ๋์๋ค. ๊ทธ๋๋ ๋ค์ ํ๋ฒ ์๊ณ ๋ฆฌ์ฆ์ ์ ๊ฒํ๋ ๋ฒ๋ฆ์ ๋ค์ด์.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_13172 : ฮฃ (0) | 2024.03.10 |
---|---|
BOJ_11054 : ๊ฐ์ฅ ๊ธด ๋ฐ์ดํ ๋ ๋ถ๋ถ ์์ด (0) | 2024.03.10 |
BOJ_9935 : ๋ฌธ์์ด ํญ๋ฐ (0) | 2024.03.01 |
BOJ_1033 : ์นตํ ์ผ (0) | 2024.02.29 |
BOJ_1850 : ์ต๋๊ณต์ฝ์ (0) | 2024.02.21 |