Tags
- Python
- SpringBoot
- sort
- queue
- ๊ทธ๋ํ ํ์
- ์๋ฎฌ๋ ์ด์
- dfs
- greedy
- ๋ฐฑํธ๋ํน
- ์๋ฃ๊ตฌ์กฐ
- ์ํ
- ์ ๋ ฌ
- Brute Force Algorithm
- Java
- BFS
- BOJ
- ๊น์ด ์ฐ์ ํ์
- ๋๋น ์ฐ์ ํ์
- ์ ์๋ก
- ๋ฌธ์์ด
- stack
- ๊ตฌํ
- DP
- PGM
- ๊ทธ๋ํ ์ด๋ก
- Dynamic Programming
- CodingTest
- ๊ต์ฌ
- LV2
- Study
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_1068 : ํธ๋ฆฌ ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- ํธ๋ฆฌ์ ๋ฃจํธ ๋
ธ๋์ ๊ฐ ์ธ๋ฑ์ค ๋ณ ๋
ธ๋์ ๋ถ๋ชจ ๋
ธ๋ ์ ๋ณด๊ฐ ์
๋ ฅ๋๋ค.
- ํ ๋ ธ๋๋ฅผ ์ง์ฐ๋ฉด ์๋ ์์ ๋ ธ๋๋ค์ด ๋ชจ๋ ์ง์์ง๋ค.
- ๋จ์ ๋ฆฌํ๋ ธ๋์ ์๋ฅผ ์ถ๋ ฅํ๋ค.
- ์ธ์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
- ๋ง์ฝ ์์ง ๋ถ๋ชจ๋ ธ๋๊ฐ ๋ฑ์ฅํ์ง ์์๋ค๋ฉด, ํ์ ๋ฃ๊ณ ์์๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค.
- ์ญ์ ํ ๋ DFS๋ฅผ ์ฌ์ฉํด ์์ ๋ ธ๋๋ฅผ ๋ชจ๋ ์ญ์ ํ๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
private static int N, cnt;
private static ArrayList<Integer>[] adjList;
private static void dfs_delete(int target) {
while (adjList[target].size() > 0) {
dfs_delete(adjList[target].get(0));
adjList[target].remove(0);
}
adjList[target] = null;
}
private static class Pair {
int i, num;
public Pair(int i, int num) {
this.i = i;
this.num = num;
}
}
private static void print() {
System.out.println("=========================");
for (ArrayList<Integer> arr : adjList) {
System.out.println(arr);
}
}
public static void main(String[] args) throws IOException {
// Input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
adjList = new ArrayList[N];
Queue<Pair> queue = new ArrayDeque<>();
int start = 0;
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
int num = Integer.parseInt(st.nextToken());
if (num == -1) {
start = i;
adjList[i] = new ArrayList<>();
} else if (adjList[num] != null) {
adjList[num].add(i);
adjList[i] = new ArrayList<>();
adjList[i].add(num);
} else {
queue.add(new Pair(i, num));
}
}
while (!queue.isEmpty()) {
Pair pair = queue.poll();
int num = pair.num;
int i = pair.i;
if (adjList[num] != null) {
adjList[num].add(i);
adjList[i] = new ArrayList<>();
adjList[i].add(num);
} else {
queue.add(new Pair(i, num));
}
}
// print();
// Delete node
cnt = 0;
int target = Integer.parseInt(br.readLine());
if (target != start) { // ๋ถ๋ชจ ๋
ธ๋๊ฐ ์์ผ๋ฉด, ๋ถ๋ชจ ๋
ธ๋์์ ํ๊ฒ ์ญ์
adjList[adjList[target].get(0)].remove(Integer.valueOf(target));
for (int i = 0; i < N; i++) { // ๋ฃจํธ ๋
ธ๋๊ฐ ์๋๋ฉด, ๋ถ๋ชจ๋
ธ๋ ์ ๋ณด ์ญ์
if (i != start)
adjList[i].remove(0);
}
dfs_delete(target);
for (ArrayList<Integer> arr: adjList) {
if (arr != null && arr.size() == 0) cnt++;
}
}
// print();
// Output
System.out.println(cnt);
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ์ธ์ ๋ฆฌ์คํธ adjList์ ํธ๋ฆฌ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
- ์์ง ๋ถ๋ชจ๊ฐ ๋ง๋ค์ด์ง์ง ์์๋ค๋ฉด ํ์ ๋ฃ๊ณ ๊ธฐ๋ค๋ฆฐ๋ค.
- ๋
ธ๋ ์ญ์ ์ฐ์ฐ์ ์ํํ๋ค.
- ๋ฃจํธ ๋ ธ๋๋ฅผ ์ญ์ ํ๋ฉด ๊ณ์ฐํ ๊ฒ๋ ์์ด 0์ ์ถ๋ ฅํ๋ค.
- ๋ถ๋ชจ๋ ธ๋๊ฐ ์์ผ๋ฉด ๋ถ๋ชจ ๋ ธ๋ ์์ ์ ๋ณด์์ ํ์ฌ ํ๊ฒ ๋ ธ๋๋ฅผ ์ง์ด๋ค.
- ํ๊ฒ ๋ ธ๋์ ์์๋ค์ dfs๋ก ๋ชจ๋ ์ญ์ ํด ์ค๋ค.
- adjList์์ null์ด ์๋(๋ ธ๋๊ฐ ์กด์ฌ) ์ํ์ด๋ฉฐ, ์์ ๋ ธ๋์ ์๊ฐ 0์ด๋ฉด ๋ฆฌํ๋ ธ๋์ด๋ฏ๋ก ์นด์ดํธํ๋ค.
- cnt๋ฅผ ๋ต์ ์ถ๋ ฅํ๋ค
๐ธ end ๐ธ
- union find ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์ธ ์ค ์์์ง๋ง, dfs๋ก ํ์ดํ ์ ์์๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_14889 : ์คํํธ์ ๋งํฌ (0) | 2023.04.07 |
---|---|
BOJ_17144 : ๋ฏธ์ธ๋จผ์ง ์๋ ! (0) | 2023.04.07 |
BOJ_13460 : ๊ตฌ์ฌ ํ์ถ 2 (0) | 2023.04.07 |
BOJ_16236 : ์๊ธฐ ์์ด (0) | 2023.04.07 |
BOJ_14890 : ๊ฒฝ์ฌ๋ก (0) | 2023.04.07 |