- Today
- Total
- CS
- PS
- ์๋ฃ๊ตฌ์กฐ
- leetcode
- java
- ํ๋ก๊ทธ๋๋จธ์ค
- ์๋ฐ์์ ์
- ๋ฒจ๋งํฌ๋
- BFS
- ๊ตฌํ
- OOP
- ์์์ ๋ ฌ
- ๋ฌธ๋ฒ
- tree
- spring
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๋ฐฑ์๋
- database
- MST
- ์กธ์ ์ํ
- array
- ์ธํด
- Graph
- pytorch
- ๋ฐฑ์ค
- dp
- Algorithm
- ๊ทธ๋ฆฌ๋
- ์๋ฐ
- ๋ค์ต์คํธ๋ผ
Partially Committed
[๋ฐฑ์ค 2252] ์ค ์ธ์ฐ๊ธฐ(JAVA) ๋ณธ๋ฌธ
https://www.acmicpc.net/problem/2252
๋ฌธ์
N๋ช ์ ํ์๋ค์ ํค ์์๋๋ก ์ค์ ์ธ์ฐ๋ ค๊ณ ํ๋ค. ๊ฐ ํ์์ ํค๋ฅผ ์ง์ ์ฌ์ ์ ๋ ฌํ๋ฉด ๊ฐ๋จํ๊ฒ ์ง๋ง, ๋ง๋ ํ ๋ฐฉ๋ฒ์ด ์์ด์ ๋ ํ์์ ํค๋ฅผ ๋น๊ตํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ธฐ๋ก ํ์๋ค. ๊ทธ๋๋ง๋ ๋ชจ๋ ํ์๋ค์ ๋ค ๋น๊ตํด ๋ณธ ๊ฒ์ด ์๋๊ณ , ์ผ๋ถ ํ์๋ค์ ํค๋ง์ ๋น๊ตํด ๋ณด์๋ค.
์ผ๋ถ ํ์๋ค์ ํค๋ฅผ ๋น๊ตํ ๊ฒฐ๊ณผ๊ฐ ์ฃผ์ด์ก์ ๋, ์ค์ ์ธ์ฐ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. M์ ํค๋ฅผ ๋น๊ตํ ํ์์ด๋ค. ๋ค์ M๊ฐ์ ์ค์๋ ํค๋ฅผ ๋น๊ตํ ๋ ํ์์ ๋ฒํธ A, B๊ฐ ์ฃผ์ด์ง๋ค. ์ด๋ ํ์ A๊ฐ ํ์ B์ ์์ ์์ผ ํ๋ค๋ ์๋ฏธ์ด๋ค.
ํ์๋ค์ ๋ฒํธ๋ 1๋ฒ๋ถํฐ N๋ฒ์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ํ์๋ค์ ์์์๋ถํฐ ์ค์ ์ธ์ด ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค. ๋ต์ด ์ฌ๋ฌ ๊ฐ์ง์ธ ๊ฒฝ์ฐ์๋ ์๋ฌด๊ฑฐ๋ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1 ๋ณต์ฌ
3 2
1 3
2 3
์์ ์ถ๋ ฅ 1 ๋ณต์ฌ
1 2 3
์์ 1์ ๊ฒฝ์ฐ, 1 > 3, 2 > 3 ์ด๋ผ๋ ์์๊ฐ ์ฃผ์ด์ก์ ๋ ์ฐ์ ์์๋ฅผ ์งํค๋ฉด์ ํ์๋ค์ ์ค ์ธ์ธ ์ ์๋ ๊ฒฐ๊ณผ๋ 1 2 3 ์ด๋ค.
๋ฌธ์ ์ ์กฐ๊ฑด์ ์ฝ์ด๋ณด๋ฉด, 1>3, 2>3 ์ด๋ผ๋ ์ฐ์ ์์๋ 1→3, 2→3 ๊ณผ ๊ฐ์ ์ฐ๊ฒฐ๊ด๊ณ๋ก ์๊ฐํ ์ ์๊ณ
๋ฌธ์ ์ํฉ์์๋ ๋น์ฐํ ์ฌ์ดํด์ด ์กด์ฌํ์ง ์์ ๊ฒ์ด๋ฏ๋ก ์์์ ๋ถํฐ ์ค์ ์ธ์ด ๊ฒฐ๊ณผ๋ ์์ ์ ๋ ฌ ๊ฒฐ๊ณผ์ ๊ฐ๋ค.
๋ต์ด ์ฌ๋ฌ ๊ฐ์ง ์ธ ๊ฒฝ์ฐ์๋ ์๋ฌด๊ฑฐ๋ ์ถ๋ ฅํ๋ผ๋ ์กฐ๊ฑด์
์์ ์ ๋ ฌ ๊ตฌํ ๊ณผ์ ์์ Queue ์ ๋ฃ๋ ์์๋ ์ด๋ป๊ฒ ํด๋ ์๊ด ์๋ค๋ ์๋ฏธ์ด๋ค.
๊ตฌํ ๊ณผ์
1. ArrayList<ArrayList<Integer>> graph ์๋ฃ๊ตฌ์กฐ์ ๊ฐ ํ์๋ค์ ํค ๋์ ๊ด๊ณ๋ฅผ ์ ์ฅ
2. indegree ๋ฅผ ๊ณ์ฐ
3. indegree ๊ฐ 0 ์ธ ๋ ธ๋๋ฅผ queue ์ offer
4. queue ๊ฐ ๋น ๋ ๊น์ง ์๋ ๊ณผ์ ์ ๋ฐ๋ณต
4-1. cur = queue.poll() , cur ์ถ๋ ฅ
4-2. cur ์ ์ฐ๊ฒฐ๋ ๋ ธ๋๋ฅผ ํ์ํ๋ค. ์ฐ๊ฒฐ๋ ๋ ธ๋์ indegree ๋ฅผ ํ๋ ์ฉ ๊ฐ์์ํจ๋ค.
4-3 ๊ทธ๋ฐ๋ฐ ์ฐ๊ฒฐ๋ ๋ ธ๋์ indegree ๊ฐ 0 ์ด ๋๋ฉด, queue ์ offer ํ๋ค.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stk = new StringTokenizer(br.readLine());
int n = Integer.parseInt(stk.nextToken()); // ํ์ ์
int m = Integer.parseInt(stk.nextToken()); // ์์ง ์
ArrayList<ArrayList<Integer>> graph = new ArrayList<>();
for (int i = 0; i <= n; i++)
graph.add(new ArrayList<>());
int[] indegree = new int[n + 1];
for (int i = 0; i < m; i++) {
stk = new StringTokenizer(br.readLine());
int a = Integer.parseInt(stk.nextToken());
int b = Integer.parseInt(stk.nextToken());
graph.get(a).add(b);
indegree[b]++;
}
Queue<Integer> q = new LinkedList<>();
for (int i = 1; i <= n; i++) {
if (indegree[i] == 0)
q.offer(i);
}
while (!q.isEmpty()) {
int now = q.poll();
System.out.print(now + " ");
for (int cur : graph.get(now)) {
indegree[cur]--;
if (indegree[cur] == 0)
q.offer(cur);
}
}
}
}
'๐ฅ Algorithm || ๋ฌธ์ ํ์ด > PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 1948] ์๊ณ๊ฒฝ๋ก (JAVA) (0) | 2023.01.17 |
---|---|
[๋ฐฑ์ค 1516] ๊ฒ์ ๊ฐ๋ฐํ๊ธฐ (JAVA) (2) | 2023.01.17 |
[๋ฐฑ์ค 27210] ์ ์ ๋ชจ์๋ ์ฌ๋น(JAVA) (0) | 2023.01.16 |
[๋ฐฑ์ค 1912] ์ฐ์ํฉ (JAVA) (0) | 2023.01.16 |
[๋ฐฑ์ค 1043] ๊ฑฐ์ง๋ง(JAVA) - Union&Find (0) | 2023.01.16 |