๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/17616)
< ๋ฑ์ ์ฐพ๊ธฐ >
๋ฌธ์ ํ์ด
์ ๋ ฅ์ ๋ฐ์ ๋ ArrayList 2๊ฐ๋ฅผ ์ฌ์ฉํด์ ์์ ๋ณด๋ค ๋ ์ํ ์ฌ๋๊ณผ ์์ ๋ณด๋ค ๋ ๋ชปํ ์ฌ๋์ ์ ์ฅํ๋ค.
dfs๋ฅผ ํ์ฉํ์ฌ ์์ ๋ณด๋ค ์ ํ ์ฌ๋์ ์์ ์์ ๋ณด๋ค ๋ชปํ ์ฌ๋์ ์๋ฅผ ๊ตฌํด ๊ฐ๋ฅํ ๊ฐ์ฅ ๋์ ๋ฑ์์ ๊ฐ๋ฅํ ๊ฐ์ฅ ๋ฎ์ ๋ฑ์๋ฅผ ๊ตฌํ๋ค.
my solution (Java)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class _17616_ { // ๋ฑ์ ์ฐพ๊ธฐ
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(bf.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int x = Integer.parseInt(st.nextToken());
ArrayList<ArrayList<Integer>> parents = new ArrayList<>();
ArrayList<ArrayList<Integer>> child = new ArrayList<>();
for (int i = 0; i < n + 1; i++) {
parents.add(new ArrayList<>());
child.add(new ArrayList<>());
}
for (int i = 0; i < m; i++) {
st = new StringTokenizer(bf.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
parents.get(b).add(a);
child.get(a).add(b);
}
boolean visited[] = new boolean[n+1];
visited[x] = true;
int start = dfs(x, parents, 0, visited);
int end = dfs(x, child, 0, visited);
bw.write((start + 1) + " " + (n - end));
bw.flush();
}
private static int dfs(int x, ArrayList<ArrayList<Integer>> arr, int count, boolean[] visited) {
for (int i = 0; i < arr.get(x).size(); i++) {
if (!visited[arr.get(x).get(i)]) {
visited[arr.get(x).get(i)] = true;
count+=dfs(arr.get(x).get(i), arr, 1, visited);
}
}
return count;
}
}
Main
๋ณ์)
n : ํ์ ์
m : ์ง๋ฌธ ์
x : ๋ฑ์๋ฅผ ์๊ณ ์ถ์ ํ์
parents : ์์ ๋ณด๋ค ์ํ ์ฌ๋ ์ ์ฅ
child : ์์ ๋ณด๋ค ๋ชปํ ์ฌ๋ ์ ์ฅ
a, b : ํ์ a๊ฐ ํ์ b๋ณด๋ค ๋ ์ํจ
visited : ๋ฐฉ๋ฌธ ์ฌ๋ถ
start : x๋ณด๋ค ์ ํ ์ฌ๋ ์
end : x๋ณด๋ค ๋ชปํ ์ฌ๋ ์
- ํ์ ์(n), ์ง๋ฌธ ์(m), ๋ฑ์๋ฅผ ์๊ณ ์ถ์ ํ์(x) ์ ๋ ฅ
- ์ง๋ฌธ ์(m)๋งํผ ํ์ a, b๋ฅผ ์ ๋ ฅ๋ฐ์ parents์๋ ์์ ๋ณด๋ค ์ํ ์ฌ๋์ ์ ์ฅํ๋ฏ๋ก b์ a๋ฅผ ์ ์ฅํ๊ณ , child์๋ ์์ ๋ณด๋ค ๋ชปํ ์ฌ๋์ ์ ์ฅํ๋ฏ๋ก a์ b๋ฅผ ์ ์ฅ
- ์์ ๋ณด๋ค ์ํ ์ฌ๋์ ์์ ๋ชปํ ์ฌ๋์ ์๋ฅผ ๊ตฌํ๊ธฐ ์ํด dfs ํจ์ 2๋ฒ ํธ์ถ
- ์ ๋ต ์ถ๋ ฅ [์์ ๋ณด๋ค ์ํ ์ฌ๋์ ์ +1, ํ์ ์ - ์์ ๋ณด๋ค ๋ชปํ ์ฌ๋์ ์]
dfs
- ์์ ๊ณผ ์ฐ๊ฒฐ๋ ์ฌ๋๋ค์ด๋ฉฐ, ์์ง ๋ฐฉ๋ฌธํ์ง ์์์ผ๋ฉด ๋ฐฉ๋ฌธ ํ dfs ํจ์ ํธ์ถ
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 28279_๋ฑ 2 (0) | 2023.08.21 |
---|---|
[Baekjoon] 2617_๊ตฌ์ฌ ์ฐพ๊ธฐ (0) | 2023.08.18 |
[Baekjoon] 12764_์ธ์ง๋ฐฉ์ ๊ฐ ์คํ (0) | 2023.08.17 |
[Baekjoon] 18917_์์ด๊ณผ ์ฟผ๋ฆฌ 38 (0) | 2023.08.16 |
[Baekjoon] 1379_๊ฐ์์ค 2 (0) | 2023.08.15 |