Notice
Recent Posts
Recent Comments
Link
| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- SAP
- batch job
- DP - ๋ฌดํ๋ฐฐ๋ญ(์์)
- cfieldname
- java
- ํ๋์นดํ๋ก๊ทธ
- DP - ๋ฌดํ๋ฐฐ๋ญ
- Data Browser
- ALV Output Setting
- Union-Find
- APPENDING
- using value
- SM36
- Dictionary Search Help
- ๋ ์ง ๊ณ์ฐ ํจ์
- qfieldname
- SAP GUI
- DP - ์ ํ๋ฐฐ๋ญ
- NEW-PAGE PRINT ON
- CTS #CTS ์ด๊ด #SAP #ABAP
- READ TABLE
- transporting
- ABAP
- MONAT_F4
- FOR ALL ENTRIES IN
- boole_d
- changing value
- ZPL
- BOJ_Gold
- APPENDING CORRESPONDING
Archives
- Today
- Total
Jin's Library
DFS, BFS Template ๋ณธ๋ฌธ
๐งญ DFS / BFS ์ ๋ณต ์ธํธ
๐งฉ 1๏ธโฃ DFS ์์ ์๊ธฐ์ฉ ๋ฒ์
๐ ๊ธฐ๋ณธ ๊ทธ๋ํํ (์ฌ๊ท DFS)
static void dfs(int node) {
visited[node] = true;
for (int next : graph[node]) {
if (!visited[next]) {
dfs(next);
}
}
}
ํจํด ์๊ธฐ ํฌ์ธํธ
- “๋ฐฉ๋ฌธํ๊ณ → ๋ค์์ผ๋ก ๊ฐ๋ค”
- ์ฌ๊ทํจ์ ์ข ๋ฃ์กฐ๊ฑด์ ๋ณ๋ ํ์ ์์ (์์ฐ์ค๋ฝ๊ฒ if๋ก ๊ฑธ๋ฌ์ง)
- ์คํ์ ์ฐ๋ DFS๋ ๊ฑฐ์ ๋์ผํ์ง๋ง ๋ช ์์ ์ผ๋ก ์คํ๋ง ์
๐ 2์ฐจ์ ๋ฐฐ์ดํ (๋ฏธ๋ก, ์ฌ ๊ฐ์, ์์ญ ํ์ ๋ฑ)
static void dfs(int x, int y) {
visited[x][y] = true;
for (int d = 0; d < 4; d++) {
int nx = x + dx[d];
int ny = y + dy[d];
if (nx < 0 || ny < 0 || nx >= N || ny >= M) continue;
if (!visited[nx][ny] && map[nx][ny] == 1) {
dfs(nx, ny);
}
}
}
ํต์ฌ
- visited ๋จผ์ ์ฒดํฌ
- ๋ฒ์์ฒดํฌ → ๋ฐฉ๋ฌธ์ฒดํฌ → ์กฐ๊ฑดํ์ธ ์์
- map[nx][ny] == 1 ๊ฐ์ ์กฐ๊ฑด์ ๋ฌธ์ ์ ๋ฐ๋ผ ๋ค๋ฆ
โ๏ธ dx, dy ๊ธฐ๋ณธ ์ธํธ (4๋ฐฉ / 8๋ฐฉ)
// 4๋ฐฉํฅ (์ํ์ข์ฐ)
int[] dx = {-1, 1, 0, 0};
int[] dy = {0, 0, -1, 1};
// 8๋ฐฉํฅ (๋๊ฐ์ ํฌํจ)
int[] dx8 = {-1,-1,-1, 0, 0, 1, 1, 1};
int[] dy8 = {-1, 0, 1,-1, 1,-1, 0, 1};
๐ 2๏ธโฃ BFS ์์ ์๊ธฐ์ฉ ๋ฒ์
๐ ๊ธฐ๋ณธ ๊ทธ๋ํํ (ํ BFS)
Queue<Integer> q = new LinkedList<>();
q.add(start);
visited[start] = true;
while (!q.isEmpty()) {
int cur = q.poll();
for (int next : graph[cur]) {
if (!visited[next]) {
visited[next] = true;
q.add(next);
}
}
}
ํจํด ์๊ธฐ ํฌ์ธํธ
- “ํ์ ๋ฃ์ ๋ ๋ฐฉ๋ฌธ ์ฒดํฌ”
- poll → ํ์ → add ๊ตฌ์กฐ
- ๊ฑฐ๋ฆฌ๊ณ์ฐ ์ ๋ฐฐ์ด ์ถ๊ฐ (dist[next] = dist[cur] + 1)
๐ 2์ฐจ์ ๋ฐฐ์ดํ (๋ฏธ๋ก ํ์, ์ต๋จ๊ฑฐ๋ฆฌ ๋ฑ)
Queue<int[]> q = new LinkedList<>();
q.add(new int[]{sx, sy});
visited[sx][sy] = true;
while (!q.isEmpty()) {
int[] cur = q.poll();
int x = cur[0];
int y = cur[1];
for (int d = 0; d < 4; d++) {
int nx = x + dx[d];
int ny = y + dy[d];
if (nx < 0 || ny < 0 || nx >= N || ny >= M) continue;
if (!visited[nx][ny] && map[nx][ny] == 1) {
visited[nx][ny] = true;
q.add(new int[]{nx, ny});
}
}
}
๐ง DFS vs BFS ๋น๊ต ์์ฝํ
ํญ๋ชฉ DFS BFS
| ํ์ ๊ตฌ์กฐ | ์ฌ๊ท or ์คํ | ํ |
| ํ์ ์์ | ํ ๊ฒฝ๋ก ๋๊น์ง | ๊ฐ๊น์ด ๋ ธ๋๋ถํฐ |
| ์ฃผ ์ฌ์ฉ ๋ชฉ์ | ๊ฒฝ๋ก ํ์, ๋ฐฑํธ๋ํน | ์ต๋จ๊ฑฐ๋ฆฌ ํ์ |
| ๋ฐฉ๋ฌธ ์ฒดํฌ ์์ | ์ฌ๊ท ์ง์ ์ง์ | ํ์ ๋ฃ์ ๋ |
| ์๊ฐ ๋ณต์ก๋ | O(V + E) | O(V + E) |
| ์ฌ์ฉ ์์ | ์ฌ์ ๊ฐ์, ์ฐ๊ฒฐ ์์ | ๋ฏธ๋ก ํ์, ์ต์ ๊ฑฐ๋ฆฌ |
๐ฏ ๋ฌธ์ ์ ํ๋ณ ์ถ์ฒ ํ ํ๋ฆฟ ์ ํํ
๋ฌธ์ ์ ํ ์์ ๋ฌธ์ ์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ ์ค๋ช
| ๋ฏธ๋ก ํ์ | 2178 | BFS | ์ต๋จ๊ฑฐ๋ฆฌ ๊ตฌํ๊ธฐ |
| ๋ฐ์ด๋ฌ์ค ์ ํ | 2606 | DFS/BFS | ์ฐ๊ฒฐ๋ ์ปดํจํฐ ์ |
| ์ฌ์ ๊ฐ์ | 4963 | DFS(8๋ฐฉํฅ) | ์์ญ ํ์ |
| ๋จ์ง ๋ฒํธ ๋ถ์ด๊ธฐ | 2667 | DFS | ์์ญ ๊ฐ์ ์ธ๊ธฐ |
| ํ ๋งํ | 7576 | BFS | ์ต๋ ์๊ฐ (๋ค์ค ์์์ ) |
| ์จ๋ฐ๊ผญ์ง | 1697 | BFS | ์ต์ ์ด๋ ํ์ |
| ์ ๊ธฐ๋ ๋ฐฐ์ถ | 1012 | DFS/BFS | ์์ญ ํ์ |
| ์ด์ ๊ณ์ฐ | 2644 | DFS/BFS | ๋ ๋ ธ๋ ๊ฐ ๊ฑฐ๋ฆฌ ๊ณ์ฐ |
| ๋ฏธ๋ก ํ์ถ | 2178 | BFS | ์ต๋จ ๊ฒฝ๋ก ๊ธธ์ด ๊ณ์ฐ |
| ์๊ณผ ๋๋ | 3184 | DFS | ์์ญ ๋ด ์กฐ๊ฑด ๊ณ์ฐ |
๐ ๋ฐฑ๋์ด์ ์๊ธฐ ํ
- ๐น “DFS๋ ๊น์ด, BFS๋ ๊ฑฐ๋ฆฌ”
- ๐น DFS๋ ์คํ or ์ฌ๊ท, BFS๋ ํ
- ๐น 2์ฐจ์ ๋ฌธ์ ๋ ํญ์ dx, dy ์ธํธ ๋จผ์ ์ ์ธ
- ๐น ๋ฐฉ๋ฌธ ์์๊ฐ ์ค์ํ๋ฉด BFS,
ํ์ ๋ฒ์๊ฐ ์ค์ํ๋ฉด DFS
'Algorithm - Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ํ ํ๋ฆฟ ์๊ณ ๋ฆฌ์ฆ (0) | 2025.10.21 |
|---|---|
| ๋ฐฑ์ค์์ ํ๋ก๊ทธ๋๋จธ์ค ์์์ฒ๋ผ (0) | 2022.06.08 |