Tags
- BFS
- PGM
- ๋๋น ์ฐ์ ํ์
- queue
- Study
- stack
- greedy
- ๊ต์ฌ
- ๊น์ด ์ฐ์ ํ์
- ์๋ฎฌ๋ ์ด์
- ๊ทธ๋ํ ์ด๋ก
- CodingTest
- ๊ทธ๋ํ ํ์
- sort
- ๊ตฌํ
- ์ ๋ ฌ
- Python
- Dynamic Programming
- DP
- ์ํ
- ๋ฐฑํธ๋ํน
- ๋ฌธ์์ด
- Brute Force Algorithm
- ์๋ฃ๊ตฌ์กฐ
- ์ ์๋ก
- dfs
- SpringBoot
- BOJ
- Java
- LV2
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_1707 : ์ด๋ถ ๊ทธ๋ํ ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ง๋ฉด, ์ด๋ถ ๊ทธ๋ํ์ธ์ง ์๋์ง ํ๋ณํ๋ค.
๐ธ ๋ฌธ์ ํ์ด ๐ธ
- ๊ทธ๋ํ ํ์์ ํตํด ๊ฐ ๋
ธ๋๊ฐ ์๋ก ๋ค๋ฅธ ์งํฉ์ ์ํ๋์ง ๊ตฌ๋ถํ๋ค.
- DFS๋ก ์ฒ์ ๋ฐฉ๋ฌธํ ๋ ธ๋์ ํ๋ฒ์ A์งํฉ, ํ๋ฒ์ B์งํฉ์ผ๋ก ๋ฒ๊ฐ์ ๊ฐ๋ฉฐ ํฌํจ์ํจ๋ค.
- ์ด๋ฏธ ๋ฐฉ๋ฌธํ ๋ ธ๋์ธ๋ฐ, ๊ฐ์ ์งํฉ์ด๋ฉด ์ด๋ถ ๊ทธ๋ํ๊ฐ ์๋๋ค.
- ์ฌ๋ฌ ๊ฐ์ ๋ถ๋ถ ๊ทธ๋ํ๋ก ์ด๋ฃจ์ด ์ ธ์์ ์ ์์ผ๋ฏ๋ก, ๋ชจ๋ ๋
ธ๋์์ DFS๋ฅผ ์์ํด๋ณธ๋ค.
- ๋ชจ๋ ํ์ ์ดํ ์ด๋ถ ๊ทธ๋ํ ํ์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.io.*;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Main {
private static ArrayList<Integer>[] adjList;
private static int[] check;
private static boolean[] visited;
private static boolean flag;
public static void main(String[] args) throws IOException {
// Input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = null;
String sb = "";
int K = Integer.parseInt(br.readLine());
for (int i = 0; i < K; i++) {
st = new StringTokenizer(br.readLine());
int V = Integer.parseInt(st.nextToken());
int E = Integer.parseInt(st.nextToken());
check = new int[V + 1];
visited = new boolean[V + 1];
flag = true;
adjList = new ArrayList[V + 1];
for (int j = 1; j <= V; j++) {
adjList[j] = new ArrayList<>();
}
for (int j = 0; j < E; j++) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
adjList[a].add(b);
adjList[b].add(a);
}
// dfs
for (int j = 1; j <= V; j++) {
if (flag)
dfs(j);
else
break;
}
if (flag)
bw.write("YES\n");
else
bw.write("NO\n");
}
// Output
bw.write(sb);
bw.flush();
}
private static void dfs(int node) {
if (!flag) return;
visited[node] = true;
for (int i : adjList[node]) {
if (!visited[i]) {
check[i] = (check[node] + 1) % 2;
dfs(i);
} else if (check[node] == check[i]) {
flag = false;
}
}
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ๋ ธ๋๋ฅผ ์ฌ๊ท ๋ฉ์๋ dfs๋ก ํ์ํ๋ฉฐ, ์ฒ์ ๋ฐฉ๋ฌธํ๋ ์ธ์ ๋ ธ๋์ 0 ๋๋ 1์ check๋ฐฐ์ด์ ์ ์ฅํ๋ค.
- ๋ง์ฝ ์ฒ์ ๋ฐฉ๋ฌธํ ๋ ธ๋๊ฐ ์๋๋ฐ, ๊ฐ์ ์ซ์์ด๋ฉด ์ฌ์ดํด์ด ๋ฐ์ ํ ๊ฒ์ด๋ฏ๋ก ์ด๋ถ ๊ทธ๋ํ๊ฐ ์๋๋ค.
๐ธ end ๐ธ
- ๊ทธ๋ํ๋ฅผ ๋ ์งํฉ์ผ๋ก ๋๋ ์ผ ํ๋ค๊ณ ํด์ ๋ถ๋ฆฌ ์งํฉ(Disjoint Set)์ผ๋ก Union-Find ๋ฉ์๋๋ฅผ ๋ง๋ค์ด์ผ ํ๋ ์ถ๋ค๊ฐ BFS๋ก ํ์ ์์ ๊ฒ ๊ฐ์ ์๋ํ๋๋ 1ํ ํ๋ ธ๋ค.
- ์๊ณ ๋ณด๋ ๋ฌธ์ ๋ฅผ ์๋ชป ์ดํดํ๋๋ฐ, ์์ ์๋ณตํ ์ ์๋ ์งํฉ์ ๋๋๋ ๊ฒ์ด ์๋๋ผ, ์ง์ ์ฐ๊ฒฐ๋ง ๋์ด์์ง ์์ผ๋ฉด ๋๋ ๊ฒ์ด์๋ค.
- ์ด๋ถ ๊ทธ๋ํ๋ฅผ ์์ง ์ต์ํ์ง ์์์ ๋ ๊ณต๋ถํด์ผ ๋ ๊ฒ ๊ฐ๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_1976 : ์ฌํ ๊ฐ์ (0) | 2024.04.22 |
---|---|
BOJ_2580 : ์ค๋์ฟ (0) | 2024.04.19 |
BOJ_3190 : ๋ฑ (0) | 2024.04.11 |
BOJ_2143 : ๋ ๋ฐฐ์ด์ ํฉ (0) | 2024.04.10 |
BOJ_1644 : ์์์ ์ฐ์ํฉ (0) | 2024.04.09 |