- Today
- Total
- ์๋ฐ์์ ์
- MST
- ๋ฒจ๋งํฌ๋
- pytorch
- ๋ฐฑ์ค
- ํ๋ก๊ทธ๋๋จธ์ค
- Graph
- ์๋ฐ
- tree
- PS
- database
- dp
- leetcode
- java
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- OOP
- ๋ฐฑ์๋
- CS
- Algorithm
- ์กธ์ ์ํ
- ๋ค์ต์คํธ๋ผ
- BFS
- array
- ๊ทธ๋ฆฌ๋
- ๊ตฌํ
- spring
- ๋ฌธ๋ฒ
- ์ธํด
- ์๋ฃ๊ตฌ์กฐ
- ์์์ ๋ ฌ
Partially Committed
[๋ฐฑ์ค 1516] ๊ฒ์ ๊ฐ๋ฐํ๊ธฐ (JAVA) ๋ณธ๋ฌธ
[๋ฐฑ์ค 1516] ๊ฒ์ ๊ฐ๋ฐํ๊ธฐ (JAVA)
WonderJay 2023. 1. 17. 13:40๋ฌธ์
https://www.acmicpc.net/problem/1516
์ ํ์ฌ์์ ์ด๋ฒ์ ์๋ก์ด ์ ๋ต ์๋ฎฌ๋ ์ด์ ๊ฒ์ ์ธ์ค ํฌ๋ํํธ๋ฅผ ๊ฐ๋ฐํ๊ธฐ๋ก ํ์๋ค. ํต์ฌ์ ์ธ ๋ถ๋ถ์ ๊ฐ๋ฐ์ด ๋๋ ์ํ๊ณ , ์ข ์กฑ๋ณ ๊ท ํ๊ณผ ์ ์ฒด ๊ฒ์ ์๊ฐ ๋ฑ์ ์กฐ์ ํ๋ ๋ถ๋ถ๋ง ๋จ์ ์์๋ค.
๊ฒ์ ํ๋ ์ด์ ๋ค์ด๊ฐ๋ ์๊ฐ์ ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์๊ธฐ ๋๋ฌธ์, ๋ชจ๋ ๊ฑด๋ฌผ์ ์ง๋๋ฐ ๊ฑธ๋ฆฌ๋ ์ต์์ ์๊ฐ์ ์ด์ฉํ์ฌ ๊ทผ์ฌํ๊ธฐ๋ก ํ์๋ค. ๋ฌผ๋ก , ์ด๋ค ๊ฑด๋ฌผ์ ์ง๊ธฐ ์ํด์ ๋ค๋ฅธ ๊ฑด๋ฌผ์ ๋จผ์ ์ง์ด์ผ ํ ์๋ ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ๋จ์ํ์ง๋ง์ ์์ ์๋ ์๋ค. ์๋ฅผ ๋ค๋ฉด ์คํํฌ๋ํํธ์์ ๋ฒ์ปค๋ฅผ ์ง๊ธฐ ์ํด์๋ ๋ฐฐ๋ญ์ ๋จผ์ ์ง์ด์ผ ํ๊ธฐ ๋๋ฌธ์, ๋ฐฐ๋ญ์ ๋จผ์ ์ง์ ๋ค ๋ฒ์ปค๋ฅผ ์ง์ด์ผ ํ๋ค. ์ฌ๋ฌ ๊ฐ์ ๊ฑด๋ฌผ์ ๋์์ ์ง์ ์ ์๋ค.
ํธ์์ ์์์ ๋ฌดํํ ๋ง์ด ๊ฐ์ง๊ณ ์๊ณ , ๊ฑด๋ฌผ์ ์ง๋ ๋ช ๋ น์ ๋ด๋ฆฌ๊ธฐ๊น์ง๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ์ง ์๋๋ค๊ณ ๊ฐ์ ํ์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๊ฑด๋ฌผ์ ์ข ๋ฅ ์ N(1 ≤ N ≤ 500)์ด ์ฃผ์ด์ง๋ค. ๋ค์ N๊ฐ์ ์ค์๋ ๊ฐ ๊ฑด๋ฌผ์ ์ง๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ๊ณผ ๊ทธ ๊ฑด๋ฌผ์ ์ง๊ธฐ ์ํด ๋จผ์ ์ง์ด์ ธ์ผ ํ๋ ๊ฑด๋ฌผ๋ค์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค. ๊ฑด๋ฌผ์ ๋ฒํธ๋ 1๋ถํฐ N๊น์ง๋ก ํ๊ณ , ๊ฐ ์ค์ -1๋ก ๋๋๋ค๊ณ ํ์. ๊ฐ ๊ฑด๋ฌผ์ ์ง๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ 100,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค. ๋ชจ๋ ๊ฑด๋ฌผ์ ์ง๋ ๊ฒ์ด ๊ฐ๋ฅํ ์ ๋ ฅ๋ง ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
N๊ฐ์ ๊ฐ ๊ฑด๋ฌผ์ด ์์ฑ๋๊ธฐ๊น์ง ๊ฑธ๋ฆฌ๋ ์ต์ ์๊ฐ์ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
5
10 -1
10 1 -1
4 1 -1
4 3 1 -1
3 3 -1
์์ ์ถ๋ ฅ 1
10
20
14
18
17
๊ฐ๊ฐ์ ๊ฑด๋ฌผ์ ์ง์ด์ง๋ ๋ฐ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ my_time[i] ๊ณผ ํ ํฌํธ๋ฆฌ(์ ํํด์ ์ง์ด์ ธ์ผ ํ๋ ๊ฑด๋ฌผ)๊ฐ ์๋ค.
๊ทธ๋ฌํ ์ํฉ์์, ๊ฐ๊ฐ์ ๊ฑด๋ฌผ์ด ์ง์ด์ง ์ ์๋ ์ต์์ ์๊ฐ์ ์ถ๋ ฅํ๋ฉด ๋๋ค.
์ฆ ๊ฐ๊ฐ์ ๊ฑด๋ฌผ์ Node ๋ก ํํํ๊ณ ํ ํฌํธ๋ฆฌ๋ฅผ Edge ๋ก ํํํ๋ฉด direct graph ์ ํํ๋ฅผ ๊ฐ์ง๋ฉฐ, ์ฌ์ดํด์ด ์กด์ฌํ์ง ์๋๋ค. ์ด๋ฌํ ์ํฉ์์ ๊ฐ์์ ํ ํฌํธ๋ฆฌ๋๋ก ๊ฑด๋ฌผ์ ๊ฑด์คํ์์ ๋, ์ต์์ ๊ฑด์ค ์๊ฐ์ ์์๋ด๊ธฐ ์ํด์๋ ์์์ ๋ ฌ์ ์ด์ฉํ๋ค.
๊ตฌํ ๊ณผ์
1. ArrayList<ArrayList<Integer>> graph ์ ๋ฐ์ดํฐ ์ ์ฅ
2. ํ์ฌ ์๊ธฐ ์์ ์ ๊ฑด์ค ์๊ฐ์ my_times ๋ฐฐ์ด์ ์ ์ฅ
3. indegree ๋ฐฐ์ด ๊ณ์ฐ
4. indegree ๊ฐ 0 ์ธ ๋ ธ๋๋ฅผ Queue ์ offer
5. Queue ๊ฐ ๋น ๋ ๊น์ง ์๋๋ฅผ ๋ฐ๋ณต
5.1 now = queue.poll()
5.2 now ์ ๋ํ์ฌ ์ฐ๊ฒฐ ์ฑ๋ถ์ ํ์ ( ์ฐ๊ฒฐ๋ ๋ ธ๋๋ฅผ cur ์ด๋ผ๊ณ ๊ฐ์ ํด๋ณด์.)
๊ทธ๋ฌ๋ฉด, minimum_time[cur] /*cur ์ด ์์ฑ๋๊ธฐ๊น์ง ๊ฑธ๋ฆฌ๋ ์ต์ ์๊ฐ*/ = Max(minimum_time[cur], minimum_time[now] + my_time[now]) ์ด๋ค.
5.3 indegree[cur] --
5.4 indegree[cur] == 0 ์ด๋ฉด queue ์ ๋ฃ๋๋ค.
6. queue ๊ฐ ๋น๋ฉด, minimum_time (์์ฑ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ)์ ์์์ ๊ฐ๊ฐ my_time (์ ํ ๊ฑด๋ฌผ ๊ณ ๋ คํ์ง ์๊ณ ์๊ธฐ ์์ ์ ๊ฑด์คํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ)์ ์์๋ฅผ ๋ํด์ ์ถ๋ ฅํ๋ค.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
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));
StringTokenizer stk = new StringTokenizer(br.readLine());
int n = Integer.parseInt(stk.nextToken());
ArrayList<ArrayList<Integer>> graph = new ArrayList<>();
for (int i = 0; i <= n; i++) {
graph.add(new ArrayList<>());
}
int[] my_time = new int[n + 1];
int[] minimum_time = new int[n + 1];
int[] indegree = new int[n + 1];
for (int i = 1; i <= n; i++) {
stk = new StringTokenizer(br.readLine());
my_time[i] = Integer.parseInt(stk.nextToken());
while (true) {
int t = Integer.parseInt(stk.nextToken());
if (t == -1)
break;
else {
graph.get(t).add(i);
indegree[i]++;
}
}
}
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();
for (int cur : graph.get(now)) {
// ์ฐ๊ฒฐ ์ฑ๋ถ ํ์
minimum_time[cur] = Math.max(minimum_time[cur], minimum_time[now] + my_time[now]);
indegree[cur]--;
if (indegree[cur] == 0)
q.add(cur);
}
}
for (int i = 1; i <= n; i++) {
minimum_time[i] += my_time[i];
System.out.println(minimum_time[i]);
}
}
}
'๐ฅ Algorithm || ๋ฌธ์ ํ์ด > PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 1753] ์ต๋จ๊ฒฝ๋ก (JAVA) (1) | 2023.01.17 |
---|---|
[๋ฐฑ์ค 1948] ์๊ณ๊ฒฝ๋ก (JAVA) (0) | 2023.01.17 |
[๋ฐฑ์ค 2252] ์ค ์ธ์ฐ๊ธฐ(JAVA) (0) | 2023.01.17 |
[๋ฐฑ์ค 27210] ์ ์ ๋ชจ์๋ ์ฌ๋น(JAVA) (0) | 2023.01.16 |
[๋ฐฑ์ค 1912] ์ฐ์ํฉ (JAVA) (0) | 2023.01.16 |