Tags
- Python
- sort
- BOJ
- DP
- Dynamic Programming
- Brute Force Algorithm
- ์ํ
- ๊ทธ๋ํ ํ์
- BFS
- greedy
- queue
- CodingTest
- dfs
- ๊ต์ฌ
- ์๋ฃ๊ตฌ์กฐ
- PGM
- ๋๋น ์ฐ์ ํ์
- ๋ฌธ์์ด
- SpringBoot
- stack
- ๊น์ด ์ฐ์ ํ์
- ์ ๋ ฌ
- ๊ตฌํ
- ์๋ฎฌ๋ ์ด์
- Java
- ๋ฐฑํธ๋ํน
- LV2
- ๊ทธ๋ํ ์ด๋ก
- Study
- ์ ์๋ก
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_1005 : ACM Craft ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- ์์ ๊ฑด๋ฌผ๋ค์ด ๋ชจ๋ ์ง์ด์ ธ์ผ ํด๋น ๊ฑด๋ฌผ์ ์ง์ ์ ์๊ฒ ๋๋ ๊ฑด๋ฌผ ์์ ๊ท์น์ด ์กด์ฌํ๋ค.
- ๊ฑด๋ฌผ์ ๋์์ ์ฌ๋ฌ ๊ฐ๋ฅผ ์ง์ ์ ์๋ค.
- ๋ชฉํ ๊ฑด๋ฌผ์ ์ง๋๋ฐ ๋๋ ์ต์ ์๊ฐ์ ์ถ๋ ฅํ๋ค.
๐ธ ๋ฌธ์ ํ์ด ๐ธ
- ๊ฑด๋ฌผ์ด ์ง์ด์ง๋ ์์๊ฐ ๋ฌ๋ผ์ง ์ ์๋๋ฐ ์ ํ ์์ ์ด ์กด์ฌํ๋ฏ๋ก, ์์ ์ ๋ ฌ์ ์ฌ์ฉํด์ ํ์ดํ๋ค.
- ๋์์ ๊ฑด๋ฌผ์ ์ง์๋ค๊ณ ํ ๋, ๊ฐ์ฅ ์ค๋ ๊ฑธ๋ฆฌ๋ ๊ฑด์ค ์๊ฐ์ด ์ต์๊ฐ์ด๋ค. ๋ฐ๋ผ์ ์ต๋๊ฐ์ ๊ฐฑ์ ํด์ ์ ์ฅํ๊ธฐ ์ํด DP๋ฅผ ์ฌ์ฉํ๋ค.
- ์ ํ์์ ๋ค์๊ณผ ๊ฐ๋ค. [ํ์ฌ ๊ฑด๋ฌผ์ ์ต๋ ๊ฑด์ค ์๊ฐ] = max([์ด์ ๊ฑด๋ฌผ์ ์ต๋ ๊ฑด์ค ์๊ฐ + ํ์ฌ ๊ฑด๋ฌผ ๊ฑด์ค ์๊ฐ], [ํ์ฌ ๊ฑด๋ฌผ์ ์ต๋ ๊ฑด์ค ์๊ฐ])
- ์์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋์ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ง์ ์ฐจ์๊ฐ 0์ธ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ ๋ฃ๋๋ค.
- ํ๊ฐ ๋น ๋๊น์ง ๋ค์์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
- ํ์์ ์์๋ฅผ ๊บผ๋ด ํด๋น ๋ ธ๋์์ ๋๊ฐ๋ ๊ฐ์ ์ ๊ทธ๋ํ์์ ์ ๊ฑฐํ๋ค.
- ์๋กญ๊ฒ ์ง์ ์ฐจ์๊ฐ 0์ด ๋ ๋ ธ๋๋ฅผ ํ์ ๋ฃ๋๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayDeque;
import java.util.ArrayList;
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));
StringBuilder sb = new StringBuilder();
StringTokenizer st = null;
int t = Integer.parseInt(br.readLine());
for (int i = 0; i < t; i++) {
st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken()); // ๊ฑด๋ฌผ ์
int K = Integer.parseInt(st.nextToken()); // ๊ฑด๋ฌผ ์ง๋ ์์ ๊ฐ์
int[] bt = new int[N + 1]; // ๊ฑด๋ฌผ ์ง๋ ์๊ฐ
ArrayList<Integer>[] adjList = new ArrayList[N + 1]; // ๊ฑด๋ฌผ ์ง๋ ์์
int[] input = new int[N + 1]; // ์ ํ ๊ท์น ์
int[] dp = new int[N + 1];
// ๊ฑด๋ฌผ ์ง๋ ์๊ฐ ์ ์ฅ
st = new StringTokenizer(br.readLine());
for (int j = 1; j <= N; j++) {
bt[j] = Integer.parseInt(st.nextToken());
adjList[j] = new ArrayList<>();
}
// ๊ฑด๋ฌผ ์ง๋ ์์ ์ ์ฅ & ์ ํ ๊ท์น ์นด์ดํธ
for (int j = 0; j < K; j++) {
st = new StringTokenizer(br.readLine());
int X = Integer.parseInt(st.nextToken());
int Y = Integer.parseInt(st.nextToken());
adjList[X].add(Y);
input[Y]++;
}
// ์ ํ ๊ท์น์ด 0๊ฐ์ธ ๊ฑด๋ฌผ ๋ถํฐ ์์
Queue<Integer> que = new ArrayDeque<>();
for (int j = 1; j <= N; j++) {
if (input[j] == 0) {
que.add(j);
dp[j] = bt[j];
}
}
while (!que.isEmpty()) {
int now = que.poll();
for (int next : adjList[now]) { // ํ์ฌ ๊ฑด๋ฌผ๊ณผ ์ฐ๊ฒฐ๋ ๊ฑด๋ฌผ์ ์ ํ ๊ท์น -1
input[next]--;
dp[next] = Math.max(dp[now] + bt[next], dp[next]); // ๊ฑด๋ฌผ์ ์ง๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ ์ต๋๊ฐ์ผ๋ก ๊ฐฑ์
if (input[next] == 0) { // ์ ํ ๊ท์น์ด 0๊ฐ๊ฐ ๋๋ฉด ํ์ ๋ฃ์ด์ฃผ๊ธฐ
que.add(next);
}
}
}
sb.append(dp[Integer.parseInt(br.readLine())]).append('\n');
}
bw.write(sb.toString());
bw.flush();
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ๊ฑด๋ฌผ ์, ์ง๋ ์์, ์ง๋ ์๊ฐ์ ์ ๋ ฅ๋ฐ๊ณ , ๊ฐ ๊ฑด๋ฌผ์ ์ ํ ๊ท์น ์๋ฅผ ์นด์ดํธํ๋ค.
- ์ ํ๊ท์น 0์ธ ๊ฑด๋ฌผ๋ค ๋ถํฐ ํ์ ๋ฃ๊ณ ์์ ์ ๋ ฌ๊ณผ DP๋ฅผ ์ ์ฉํ๋ค.
- ํ์ฌ ๊ฑด๋ฌผ๊ณผ ์ฐ๊ฒฐ ๋ ๋ค์ ๊ฑด๋ฌผ์ ์ง์ ์ฐจ์๋ฅผ -1 ํ๋ค.
- ๊ฑด๋ฌผ์ ์ง๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ต๋๊ฐ์ dp์ ๊ฐฑ์ ํ๋ค.
- ์ง์ ์ฐจ์๊ฐ 0์ด ๋๋ฉด ํ์ ๋ฃ๋๋ค.
- dp ๋ฐฐ์ด์์ ์ต์์๊ฐ์ ๊ตฌํ๊ณ ์ ํ๋ ๊ฑด๋ฌผ์ ์ธ๋ฑ์ค๋ฅผ ๋ฃ์ด ๋ต์ ์ถ๋ ฅํ๋ค.
๐ธ end ๐ธ
- ์ฒ์์ ๊ทธ๋ฆฌ๋๋ก ํ์ดํ๋ ค๊ณ ํ์ง๋ง, ์์ 2๋ฒ์ 3๋ฒ์งธ ์ผ์ด์ค์์ ์คํจํ๋ค. ์ ํ ์์ ์ด ์ฌ๋ฌ ๊ฐ์ง๊ฐ ๊ฒน์ณ ์๋ ์ํ๋ฅผ ๋ฐ์ํ์ง ๋ชปํ๋ค.
- ์๊ณ ๋ฆฌ์ฆ์ด ์๊ฐ๋์ง ์์ ํ์ด ํฌ์คํ
์ ์ฐธ๊ณ ํด ํ์ดํ๋ค.
- ์์ ์ ๋ ฌ๊ณผ DP๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค๋ ๊ฑธ ์๊ณ ๋ฐ๋ก ์ฝ๊ฒ ํ์ดํ ์ ์์๋ค.
- ์์ ์ ๋ ฌ์ ์๊ฐ๋ณด๋ค ์ด๋ ต์ง ์์๋ฐ, ๋ค๋ฆ๊ฒ ๋ฐฐ์์ ๊ดํ ์ด๋ ต๊ฒ ์ธ์ํ๊ณ ์๋ ๊ฒ ๊ฐ๋ค. ๋ ์ฐ์ตํ๋๋ก ํ์.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_1644 : ์์์ ์ฐ์ํฉ (0) | 2024.04.09 |
---|---|
BOJ_12015 : ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด 2 (0) | 2024.04.09 |
BOJ_12100 : 2048 (Easy) (0) | 2024.03.31 |
BOJ_20040 : ์ฌ์ดํด ๊ฒ์ (0) | 2024.03.29 |
BOJ_18352 : ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ (0) | 2024.03.27 |