Tags
- queue
- BFS
- ์๋ฃ๊ตฌ์กฐ
- PGM
- ๋๋น ์ฐ์ ํ์
- Brute Force Algorithm
- ๊ทธ๋ํ ํ์
- sort
- Python
- ๊น์ด ์ฐ์ ํ์
- Java
- ์๋ฎฌ๋ ์ด์
- SpringBoot
- ์ํ
- Study
- ์ ์๋ก
- DP
- dfs
- ๊ทธ๋ํ ์ด๋ก
- ๋ฌธ์์ด
- Dynamic Programming
- ๊ตฌํ
- ๋ฐฑํธ๋ํน
- CodingTest
- BOJ
- stack
- ๊ต์ฌ
- greedy
- LV2
- ์ ๋ ฌ
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_18352 : ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- N๊ฐ์ ๋์์ ๋์ ์ฌ์ด๋ฅผ ์ฐ๊ฒฐํ๋ M๊ฐ์ ๋จ๋ฐฉํฅ ๋๋ก๊ฐ ์กด์ฌํ๋ค.
- ๋๋ก ํ๋ ๋น 1์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ๋๋ค.
- X๋ฒ ๋์์์ ์์ํด ์ต๋จ๊ฑฐ๋ฆฌ๊ฐ ์ ํํ X ๊ฑฐ๋ฆฌ๋งํผ ๋จ์ด์ง ๋์์ ๋ชฉ๋ก์ ์ถ๋ ฅํ๋ค.
๐ธ ๋ฌธ์ ํ์ด ๐ธ
- ํ๋์ ๋
ธ๋์์ ๋ค๋ฅธ ๋ชจ๋ ๋
ธ๋๋ค์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํด์ผ ํ๋ฏ๋ก ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.
- N์30๋ง๊ฐ์ธ๋ฐ, ์ฐ์ ์์ ํ๋ฅผ ํ์ฉํด O(NlogN)์ผ๋ก ํด๊ฒฐํ๋ฉด, ์ฝ 16์ต(1.6์ด)์ผ๋ก ์ ํ์๊ฐ 2์ด์ ์ถฉ๋ถํ๋ค.
- ๊ฐ์ ์ด 100๋ง๊ฐ ์ด๋ฉด์ ๊ฐ์ ๋น 1์ ๊ฐ์ค์น๋ฅผ ๊ฐ์ง๋ฏ๋ก intํ์ผ๋ก ์ถฉ๋ถํ๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.io.*;
import java.util.ArrayList;
import java.util.PriorityQueue;
import java.util.Queue;
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 = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
int X = Integer.parseInt(st.nextToken());
int[] city = new int[N + 1];
ArrayList<Integer>[] adjList = new ArrayList[N + 1];
for (int i = 0; i <= N; i++) {
city[i] = Integer.MAX_VALUE;
adjList[i] = new ArrayList<>();
}
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
adjList[Integer.parseInt(st.nextToken())].add(Integer.parseInt(st.nextToken()));
}
Queue<Edge> pq = new PriorityQueue<>();
pq.add(new Edge(X, X, 0));
while (!pq.isEmpty()) {
Edge edge = pq.poll();
if (city[edge.end] > edge.cost) {
city[edge.end] = edge.cost;
for (int i : adjList[edge.end]) {
pq.add(new Edge(edge.end, i, edge.cost + 1));
}
}
}
for (int i = 1; i <= N; i++) {
if (city[i] == K) {
sb.append(i).append('\n');
}
}
if (sb.length() == 0) {
sb.append(-1);
}
bw.write(sb.toString().trim());
bw.flush();
}
private static class Edge implements Comparable<Edge> {
int start, end, 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์ ์ ์ฅํด ์ฌ์ฉํ๋ค.
- X์์ X๋ก ๊ฐ๋ ๊ฑฐ๋ฆฌ๋ 0์ด๋ผ๊ณ ํ์ผ๋ฏ๋ก, ์ฐ์ ์์ ํ์ ์์ ๊ฐ์ผ๋ก ๋ฃ๊ณ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์คํํ๋ค.
- ์ ์ฅ๋ ์ต๋จ ๊ฑฐ๋ฆฌ๋ณด๋ค ์์ ๊ฐ์ด ๋์ค๋ฉด, ๊ฐ์ ๊ฐฑ์ ํ๊ณ ๋ค์ ์ฐ๊ฒฐ๋ ๊ฐ์ ์ ๋ณด๋ฅผ ํ์ ๋ฃ์ด ํ์ธํ๋ค.
- ๋ชจ๋ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐ ํ, ๊ฐ์ด K์ธ ๋ ธ๋ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๋ค.
๐ธ end ๐ธ
- ๋น๋ ํ์ ๋๋ ์ ๋๋๋ฐ, ์ ์ถํด๋ณด๋ StringBuilder ๋ถ๋ถ์ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฌ๋ค.
- ๊ธฐ์กด ์ฝ๋๋ sb.isEmpty()์ด๋ฉด sb.append(-1)์ ๋ฃ๋ ๋ฐฉ์์ผ๋ก, ๊ฑฐ๋ฆฌ๊ฐ K์ธ ๋์๊ฐ ์์ผ๋ฉด -1์ ๋ฃ๊ณ ์ ํ๋ค.
- ํ์ง๋ง isEmpty()์ดํ์ append๋ฅผ ์ฌ์ฉํ๋๊ฒ ๋ฐฑ์ค ์ปดํ์ผ๋ฌ์์๋ ์๋ฌ๊ฐ ๋๋๋ฏ ํ๋ค.
- sb.length()๊ฐ 0์ธ์ง ํ์ธํ๋ ์ฝ๋๋ก ๋ณ๊ฒฝํ๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_12100 : 2048 (Easy) (0) | 2024.03.31 |
---|---|
BOJ_20040 : ์ฌ์ดํด ๊ฒ์ (0) | 2024.03.29 |
BOJ_1647 : ๋์ ๋ถํ ๊ณํ (0) | 2024.03.14 |
BOJ_1197 : ์ต์ ์คํจ๋ ํธ๋ฆฌ (0) | 2024.03.13 |
BOJ_27172 : ์ ๋๋๊ธฐ ๊ฒ์ (0) | 2024.03.12 |