๐ ๏ธ ๋ฌธ์ ๐ ๏ธ
๐๏ธ ์ค๋ช ๐๏ธ
ํธ๋ฆฌ์ ๊ตฌ์กฐ๋ ๋ถ๋ชจ์ ์์์ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋ค.
์ด ๋ฌธ์ ์์ ์ ๋ ฅ์ผ๋ก ๊ฐ ๋ ธ๋์ ๋ถ๋ชจ๋ฅผ ์ ๋ ฅ๋ฐ๊ธฐ ๋๋ฌธ์ ๋ถ๋ชจ ๋ ธ๋์ ์์ ๋ ธ๋๋ฅผ ์ถ๊ฐํด์ฃผ์๋ค.
for(int i = 0; i < n; i++) {
int p = Integer.parseInt(st.nextToken());
if(p == -1) { //๋ฃจํธ๋
ธ๋ ์ ์ฅํ๊ธฐ
root = i;
}
else {
tree[p].add(i); //๋ถ๋ชจ๋
ธ๋์๊ฒ ์์๋
ธ๋ ์ถ๊ฐ
}
}
์ด์ ๊ฐ์ด ์ ์ฅํ ํ ์ ์ฒด์ ์ผ๋ก DFS๋ฅผ ์ด์ฉํ์ฌ ๋ฆฌํ๋ ธ๋๋ฅผ ํ์ํ๋ค.
๊ทธ๋ฌ๋ ์ฌ๊ธฐ์ ๋ด๊ฐ ์๊ฐํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํด์ ์ด๋ฅผ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
1. ๋ฃจํธ ๋ ธ๋๊ฐ ๋ฆฌํ๋ ธ๋๊ฐ ๋๋ ๊ฒฝ์ฐ
- ๋ฃจํธ๋ ธ๋๊ฐ ํ๋์ ์์๋ ธ๋๋ฅผ ๊ฐ์ง๋๋ฐ ๊ทธ ์์ ๋ ธ๋๋ฅผ ์ญ์
- ๋ฃจํธ ๋ ธ๋๋ ๋ฆฌํ ๋ ธ๋๊ฐ ๋์ด ๊ฒฐ๊ณผ๊ฐ 1์ด ๋ ๊ฒ์ด๋ค.
2. ๋ฃจํธ ๋ ธ๋๋ฅผ ์ญ์ ํ ๊ฒฝ์ฐ
- ์ ์ด์ ํ์์ ํ ํ์๊ฐ ์๋ค.
์ฒ์์๋ ๋ชจ๋ ์์ ๊ฐ ๋ง๋๋ฐ ์ ํ๋ฆฌ๋์ง ์๊ฐํ์ง ๋ชปํ๋ค.
๊ทธ๋ฌ๋ค๊ฐ ๋ฐฑ์ค ์ง๋ฌธ ๊ฒ์ํ์์ ๋ฐ๋ก๋ฅผ ์์ฃผ ์ฝ๊ฒ ์ ๋ฆฌํ ๊ธ์ ๋ณด์๋ค.
(https://www.acmicpc.net/board/view/132447)
์๊ฐํด๋ณด๋ ๊ฐ์ฅ ๋์ ๊ฒฝ์ฐ
๋ฃจํธ ๋ ธ๋๋ฅผ ์๊ฐํด๋ณด๋ ๊ฒ์ฒ๋ผ!
์ด๋ฌํ ๊ฒฝ์ฐ๋ฅผ ์ ์๊ฐํ์ง ๋ชปํ๋ ๊ฒ ๊ฐ๋ค.
๊ทธ๋์ ์์ผ๋ก ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ๊ฒฝ์ฐ๋ฅผ ๋ค์ํ๊ฒ ์๊ฐํ๋ ์ต๊ด์ ๋ค์ฌ์ผ๊ฒ ๋ค.
๐ ํ์ด ๐
package Baekjoon;
import java.io.*;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class DFS1068 {
static ArrayList<Integer>[] tree;
static int count;
static int remove;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
tree = new ArrayList[n];
count = 0;
for(int i = 0; i < n; i++) {
tree[i] = new ArrayList<>();
}
StringTokenizer st = new StringTokenizer(br.readLine());
int root = 0;
for(int i = 0; i < n; i++) {
int p = Integer.parseInt(st.nextToken());
if(p == -1) {
root = i;
}
else {
tree[p].add(i);
}
}
remove = Integer.parseInt(br.readLine());
if(root != remove) { //๋ฃจํธ๋
ธ๋๋ฅผ ์ง์ฐ์ง ์์ผ๋ฉด ํ์ ๊ฐ๋ฅ
dfs(root);
}
bw.write(count + "");
bw.flush();
bw.close();
}
static void dfs(int n) {
boolean flag = false;
for(int i = 0; i < tree[n].size(); i++) {
int c = tree[n].get(i);
if(c != remove) { //์ง์์ผํ๋ ๋
ธ๋๊ฐ ์๋ ๊ฒฝ์ฐ
dfs(c);
flag = true;
}
}
if(!flag){
count++;
}
}
}
'ProgramSolve > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 13023๋ฒ - ABCDE (Java) (0) | 2024.03.01 |
---|---|
[BOJ] 2477๋ฒ - ์ฐธ์ธ๋ฐญ (Java) (4) | 2024.02.19 |
[BOJ] 5397๋ฒ - ํค๋ก๊ฑฐ (Java) (2) | 2024.01.28 |
[BOJ] 2512๋ฒ - ์์ฐ (Java) (0) | 2024.01.15 |
[BOJ] 13904๋ฒ - ๊ณผ์ (Java) (2) | 2024.01.05 |