ํฐ์คํ ๋ฆฌ ๋ทฐ
https://www.acmicpc.net/problem/2252
ํ์ด
- "์ฐ๊ฒฐ ์ ๋ณด๊ฐ ์ฃผ์ด์ง N๋ช
์ ํ์ ์ค ์ธ์ฐ๊ธฐ"๋ ๋ค์๊ณผ ๊ฐ์ด ํด์ํ ์ ์๋ค.
=> ์ฐ๊ฒฐ ์ ๋ณด๊ฐ ์ฃผ์ด์ง ์ํํ์ง ์๋ ๋ฐฉํฅ์ฑ ๊ทธ๋ํ(DAG=๋ฐฉํฅ์ฑ ๋น์ํ ๊ทธ๋ํ)์์ ๊ฐ ๋ ธ๋๋ฅผ ์ค ์ธ์ฐ์์ค. - ์ด๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ์์์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ๊ณผ ์ผ์นํ๋ฏ๋ก ์์์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด ํ์ดํ๋ค.
- ์ฌ๊ธฐ์๋ ๊ฐ ๋ ธ๋์ ์ฐ๊ฒฐ ๋นํ ์ ๋ณด๋ฅผ linked ๋ฐฐ์ด์ ๋ฏธ๋ฆฌ ์ ๋ ฅ ํ linked ๋ฐฐ์ด์ด 0์ธ ๊ฒฝ์ฐ ํด๋น ๋ ธ๋๋ฅผ queue์ ์ถ๊ฐํ์ฌ BFS๋ฅผ ์ด์ฉํด ์์์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๋ค.
- ๊ฐ ๋ ธ๋์ ์ฐ๊ฒฐ ๋นํ ์ ๋ณด๋ฅผ linked ๋ฐฐ์ด์ ์ ์ฅํ๋ค.
- linked ๋ฐฐ์ด์์ ๊ฐ์ด 0์ธ ๋ ธ๋๋ฅผ queue์ ์ถ๊ฐํ๋ค.
- ์ฌ๊ธฐ์๋ถํฐ๋ BFS๋ฅผ ์ด์ฉํด ํ์ํ๋๋ฐ, queue์ ๋
ธ๋๋ฅผ ์ถ๊ฐํ๋ ์กฐ๊ฑด์ ๋ค์๊ณผ ๊ฐ๋ค.
- queue์์ ๋ ธ๋ ํ๋๋ฅผ ๊บผ๋ด๊ณ ์ ๋ต ์ถ๋ ฅ์ ์ด์ฉํ StringBuffer์ ์ถ๊ฐํ๋ค.
- queue์์ ๊บผ๋ธ ํ์ฌ ๋ ธ๋(current)์ ์ฐ๊ฒฐ๋ ๋ ธ๋(node)๋ฅผ ์ํํ๋ฉฐ, linked[node]๋ฅผ 1์ฉ ๊ฐ์ ์ํจ๋ค.
- linked[node]๊ฐ 0์ด ๋์๋ค๋ฉด, queue์ ์ถ๊ฐํ๊ณ ๋ฐฉ๋ฌธ์ฒ๋ฆฌํ๋ค.
- ์ฌ๊ธฐ์ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ linked[node] == 0 ์ธ ๊ฒฝ์ฐ๋ก ์ฒ๋ฆฌํ๋ค.
- StringBuffer์ ๋ด์๋ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
์ฝ๋
import java.io.*;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class ์ค_์ธ์ฐ๊ธฐ_2252 {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
String[] input = br.readLine().split(" ");
int N = Integer.parseInt(input[0]);
int M = Integer.parseInt(input[1]);
StringBuffer sb = new StringBuffer();
List<List<Integer>> graph = new ArrayList<>();
int[] linked = new int[N + 1];
for (int i = 0; i <= N; i++) {
graph.add(new ArrayList<>());
}
for (int i = 0; i < M; i++) {
String[] input2 = br.readLine().split(" ");
int start = Integer.parseInt(input2[0]);
int target = Integer.parseInt(input2[1]);
linked[target] += 1;
graph.get(start).add(target);
}
Queue<Integer> queue = new LinkedList<>();
for (int i = 1; i < linked.length; i++) {
if (linked[i] == 0) {
queue.add(i);
}
}
while (!queue.isEmpty()) {
Integer current = queue.poll();
sb.append(current + " ");
List<Integer> nodeList = graph.get(current);
for (Integer node : nodeList) {
if (--linked[node] == 0) {
queue.add(node);
}
}
}
bw.write(sb.toString());
bw.close();
br.close();
}
}
๋ฐ์ํ
'PS > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 7576 : ํ ๋งํ - java [์๋ฐ] (0) | 2022.03.02 |
---|---|
[๋ฐฑ์ค] 2667 : ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ - java [์๋ฐ] (0) | 2022.02.28 |
[๋ฐฑ์ค] 11724 : ์ฐ๊ฒฐ ์์์ ๊ฐ์ - java [์๋ฐ] (0) | 2022.02.28 |
[๋ฐฑ์ค] 2805 : ๋๋ฌด ์๋ฅด๊ธฐ - java [์๋ฐ] (0) | 2022.02.26 |
๊ณต์ง์ฌํญ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ
- Total
- Today
- Yesterday
TAG
- HTTP
- ์ฝ๋ฉํ ์คํธ
- 2๋ ์ฐจ ์๋ฒ ๊ฐ๋ฐ์
- ๋ฐฑ์ค
- ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค
- ํด์
- grpc client
- ์ข์ ๊ฐ๋ฐ์
- golang oomkilled
- ์ข์ ์ฝ๋๋ ๋ฌด์์ธ๊ฐ?
- kotlin s3 upload
- ์ข์ ์์ง๋์ด
- ํ(Heap)
- mysql ์คํ ๊ณํ
- rate limit
- ์ถ์ ์ง๋
- AWS re:Invent 2023
- Golang
- 2023 ํ๊ณ
- mysql
- ๊น์ด/๋๋น ์ฐ์ ํ์(DFS/BFS)
- ์ฅ์ ํ๊ณ
- ์๊ณ ๋ฆฌ์ฆ
- ํ๋ก๊ทธ๋๋จธ์ค
- ์คํ/ํ
- Aws Reinvent 2023
- ๋ฑ ํฌ์๋ฌ๋ ๊ฐ๋ฐ์
- 2023 ๊ฐ๋ฐ์ ํ๊ณ
- ์ข์ ๊ฐ๋ฐ์ ๋๊ธฐ
- Go
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
๊ธ ๋ณด๊ดํจ