[Java] BOJ 1005 - ACM CraftProblem Solving/Baekjoon Online Judge (BOJ)2025. 4. 29. 14:41
Table of Contents

01. ๐ ๋ฌธ์ ํ์
- ๋งค ๊ฒ์์์ ์ ๊ฑด๋ฌผ์ ์ง๋ ์์๊ฐ ์ฃผ์ด์ง
(๊ฐ ๊ฒ์๋ง๋ค ๊ฑด๋ฌผ์ ์ง๋ ์์๊ฐ ๋ค๋ฅผ ์ ์์) - ๋ชจ๋ ๊ฑด๋ฌผ์ ๊ฐ๊ฐ ๊ฑด์ค์ ์์
(๋ค์ ๊ฑด๋ฌผ์ ์ ํ ๊ฑด๋ฌผ์ด ๋ชจ๋ ์์ฑ๋์ด์ผ ๊ฑด์ค ์์ ๊ฐ๋ฅ)
N: ๊ฑด๋ฌผ์ ๊ฐ์
K: ๊ฑด์ค ์์ ๊ท์น์ ๊ฐ์
$D_1, D_2, ..., D_N$: 1~N๋ฒ ๊ฑด๋ฌผ์ ๊ฑด์ค์ ๊ฑธ๋ฆฌ๋ ์๊ฐ
X, Y: X๊ฑด๋ฌผ์ด ์ ํ๋์ด์ผ Y๊ฑด๋ฌผ์ ๊ฑด์คํ ์ ์์
W: ๋ชฉํ ๊ฑด๋ฌผ
- ๋ชฉํ W๋ฒ ๊ฑด๋ฌผ์ด ๊ฑด์ค์๋ฃ ํ๋๋ฐ ๋๋ ์ต์ ์๊ฐ์ ์ถ๋ ฅ
01-1. ์๊ณ ๋ฆฌ์ฆ ์ ํ & ์๊ฐ ๋ณต์ก๋
- ์์ ๊ฑด๋ฌผ๊ณผ ๊ฑด๋ฌผ์ ์ง๋ ์์๊ฐ ๊ฒ์๋ง๋ค ๋ฐ๋๋ฏ๋ก, ์์ ์ ๋ ฌ์ ์ด์ฉํ์ฌ ์ฃผ์ด์ง๋ ๊ฑด์ค ์์๋ก ํ์์ ์งํ
- ์ด์ ๊ฑด๋ฌผ ๊ฑด์ค์ ๊ฑธ๋ฆฐ ์ต๋ ์๊ฐ์ด ๋ค์ ๊ฑด๋ฌผ ๊ฑด์ค ์์ ์์์ ์ํฅ์ ๋ฐ์ผ๋ฏ๋ก, DP๋ฅผ ์ด์ฉํ์ฌ ์ด๋ฅผ ๊ตฌํ
02. ๐ ์ฝ๋ ์ค๊ณํ๊ธฐ
- ๊ฑด๋ฌผ์ ๋ํ ์ ๋ณด(๊ฑด์ค ์๊ฐ, ๊ฑด๋ฌผ ์์, ๋ชฉํ ๊ฑด๋ฌผ)๋ฅผ ์ ๋ ฅ
- X ๋ค์์ ์ฌ Y๋ฅผ 2์ฐจ์ ๋ฐฐ์ด๋ก ์ ์ฅ
- Y์ ์์ฃผ ์ ๋ ฅ๋๋ ๊ฑด๋ฌผ์ผ ์๋ก, ๋์ค์ ๊ฑด์ค๋๋ฏ๋ก ์ง์ ์ฐจ์๋ฅผ Y์ ๋ํด ์ง์ ์ฐจ์๋ฅผ +1์ฉ ํด์ค
- ์ง์ ์ฐจ์๊ฐ 0์ธ ๊ฑด๋ฌผ์ Queue์ ๋ด์
- Queue์์ ์์๋ฅผ ํ๋ ์ฉ ๊บผ๋ด๋ฉฐ ๋ฐ๋ณต
- ๊บผ๋ธ ์์์ ๋ํด ๋ค์ ์์์ ๊ฑด๋ฌผ์ ํ์
- ํ์ฌ ๊ฑด๋ฌผ ๊ฑด์ค์ ๊ฑธ๋ฆฐ ์๊ฐ time[i]์ ๋ค์ ๊ฑด๋ฌผ ๊ฑด์ค ์๊ฐ D[i+1]์ ๋ํ ๊ฐ๊ณผ time[i+1]์ ๋น๊ตํ์ฌ ๋ ํฐ ๊ฐ์ time[i+1]๋ก ํจ
- ๋ค์ ๊ฑด๋ฌผ์ ์ง์ ์ฐจ์๋ฅผ -1 ํ๊ณ ์ง์ ์ฐจ์๊ฐ 0์ด ๋๋ฉด, ์ ํ ๊ฑด๋ฌผ๋ค์ด ๋ชจ๋ ์๋ฃ๋์๋ค๋ ๊ฒ์ผ๋ก Queue์ ์ถ๊ฐ
- ๊ฐ ๊ฑด๋ฌผ์ ๋ํ ์ต๋๊ฐ์ด time[i]์ ์ ์ฅ๋์ด ์์ผ๋ฏ๋ก, time[W]๋ฅผ ์ถ๋ ฅ
03. ๐ ๏ธ ์๋๋ณ ์์
1ํ์ฐจ
04. ๐๏ธ ์ ๋ต ์ฝ๋
import java.io.*;
import java.util.*;
public class boj1005 {
static int T;
static int N, K, W;
static int X, Y;
static int[] D;
static List<Integer>[] graph;
static int[] indegree;
static int[] time;
public static int solution(){
Queue<Integer> q = new LinkedList<>();
time = new int[1_001];
for(int i = 1; i <= N; i++){
if(indegree[i] == 0) {
q.offer(i);
time[i] = D[i];
}
}
while(!q.isEmpty()){
int cur = q.poll();
for(int i = 0; i < graph[cur].size(); i++){
int nxt = graph[cur].get(i);
indegree[nxt]--;
time[nxt] = Math.max(time[cur] + D[nxt], time[nxt]);
if(indegree[nxt] == 0) q.offer(nxt);
}
}
return time[W];
}
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;
T = Integer.valueOf(br.readLine());
D = new int[1_001];
graph = new ArrayList[1_001];
while(T-- > 0){
st = new StringTokenizer(br.readLine());
N = Integer.valueOf(st.nextToken());
K = Integer.valueOf(st.nextToken());
st = new StringTokenizer(br.readLine());
for(int i = 1; i <= N; i++) D[i] = Integer.valueOf(st.nextToken());
for(int i = 0; i < 1001; i++) graph[i] = new ArrayList<Integer>();
indegree = new int[1001];
for(int i = 1; i <= K; i++){
st = new StringTokenizer(br.readLine());
X = Integer.valueOf(st.nextToken());
Y = Integer.valueOf(st.nextToken());
graph[X].add(Y);
indegree[Y]++;
}
W = Integer.valueOf(br.readLine());
bw.write(solution() + "\n");
}
bw.flush();
bw.close();
br.close();
}
}
'Problem Solving > Baekjoon Online Judge (BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Java] BOJ 2263 - ํธ๋ฆฌ์ ์ํ (0) | 2025.05.03 |
|---|---|
| [Java] BOJ 11049 - ํ๋ ฌ ๊ณฑ์ ์์ (0) | 2025.05.01 |
| [Java] BOJ 2842 - ์ง๋ฐฐ์ ํ์๋ (0) | 2025.04.27 |
| [Java] BOJ 12014 - ์ฃผ์ (0) | 2025.04.26 |
| [C++] BOJ 1938 - ํต๋๋ฌด ์ฎ๊ธฐ๊ธฐ (0) | 2025.04.25 |
@ONE_ :: ์ ํธ์
์๋ชป๋ ์ ๋ณด๊ฐ ์๋ค๋ฉด ๋ง์ํด์ฃผ์ธ์!