โ๊ณต๋ถํ๊ฒ ๋ ๊ณ๊ธฐ
โก๏ธ ๋ค์์ฃผ ์๊ณ ๋ฆฌ์ฆ ์คํฐ๋ ์ฃผ์ ์ธ DFS & BFS ์ ๋ํด์ ์์ต
โ๏ธ๊ณต๋ถํ ๋ด์ฉ
1๏ธโฃ ๊ด๋ จ ์๋ฃ๊ตฌ์กฐ
โก๏ธ DFS ์ BFS ์ ๋ํด ๊ณต๋ถํ๊ธฐ์ ์์๋์ด์ผํ ์๋ฃ๊ตฌ์กฐ๊ฐ ์๋ค.
โ Stack & Queue
โก๏ธ ํด๋น ๋ด์ฉ์ ๊ณผ๊ฑฐ ์ด๋ฏธ ์ ๋ฆฌํ๋ ๋ด์ฉ์ด๋ผ ํด๋น ๊ธ์ ๋งํฌํด๋๋ ๊ฒ์ผ๋ก ๋ง๋ฌด๋ฆฌํ๋ค.
(Java) ์คํ(Stack) & ํ(Queue)
โ๊ณต๋ถํ๊ฒ ๋ ๊ณ๊ธฐ ํ๋ก๊ทธ๋๋จธ์ค ์คํ & ํ ํํธ๋ฅผ ํ๊ธฐ ์ ๊ฐ๋ ์ ํ์ธ โ๏ธ๊ณต๋ถํ ๋ด์ฉ 1๏ธโฃ Stack โ ์ ์ธ โก๏ธ Class ์ด๋ฏ๋ก ์์ฑ์๋ฅผ ํตํด ๋ฐ๋ก ๊ฐ์ฒด ์์ฑ์ด ๊ฐ๋ฅํ๋ค. // Stack ์ ์ธ Stack stack =
like099.tistory.com
โก ์ฌ๊ท ํจ์ (Recursive Function)
โก๏ธ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ์ ์๊ณ ์์ผ๋ ํน์ด์ฌํญ ์ ๋๋ง ์ ๋ฆฌํด๋๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
- ์ฌ๊ท ํจ์๋ฅผ ์ ํ์ฉํ๋ฉด ๋ณต์กํ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๊ฒฐํ๊ฒ ์์ฑํ ์ ์์ง๋ง, ๋ค๋ฅธ ์ฌ๋์ด ์ดํดํ๊ธฐ ์ด๋ ค์ด ํํ๊ฐ ๋ ์ ์์ผ๋ฏ๋ก ์ ์คํ๊ฒ ์ฌ์ฉํด์ผํ๋ค.
- ๋ชจ๋ ์ฌ๊ท ํจ์๋ ๋ฐ๋ณต๋ฌธ์ ์ด์ฉํ์ฌ ๋์ผํ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๊ณ , ๋ฐ๋ผ์ ๋ฌธ์ ์ ๋ฐ๋ผ ๋ฐ๋ณต๋ฌธ๊ณผ ์ฌ๊ทํจ์ ์ค ์ ๋ฆฌํ ํํ๋ฅผ ์ ๊ณจ๋ผ์ผํ๋ค.
- ์ปดํจํฐ๊ฐ ํจ์๋ฅผ ์ฐ์์ ์ผ๋ก ํธ์ถํ๋ฉด ์ปดํจํฐ ๋ฉ๋ชจ๋ฆฌ ๋ด๋ถ์ ์คํ ํ๋ ์์ ์์ธ๋ค. ์ด๋ฌํ ์ ์ ํ์ฉํด์ ์คํ ์ฌ์ฉ์ ๊ตฌํ์ ์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋์ ์ ์ฌ๊ท ํจ์๋ฅผ ์ด์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
2๏ธโฃ DFS (Depth-First Search)
โก๏ธ ๊ทธ๋ํ์์ ๊น์ ๋ถ๋ถ์ ์ฐ์ ์ ์ผ๋ก ํ์ํ๋ ๊น์ด ์ฐ์ ํ์ ์๊ณ ๋ฆฌ์ฆ์ด๋ฉฐ, ์คํ ์๋ฃ๊ตฌ์กฐ๋ ์ฌ๊ท๋ฅผ ํ์ฉํ์ฌ ๊ตฌํ ํ๋ค.
โ ๋์ ๊ณผ์
(1) ํ์ ์์ ๋ ธ๋๋ฅผ ์คํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
(2) ์คํ์ ์ต์๋จ ๋ ธ๋์ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ํ ๋ ธ๋๊ฐ ํ๋๋ผ๋ ์์ผ๋ฉด ๊ทธ ๋ ธ๋๋ฅผ ์คํ์ ๋ฃ๊ณ ๋ฐฉ๋ฌธ์ฒ๋ฆฌํ๋ค. ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋๊ฐ ์์ผ๋ฉด ์คํ์์ ์ต์๋จ ๋ ธ๋๋ฅผ ๊บผ๋ธ๋ค.
(3) ๋ ์ด์ ๊ณผ์ (2) ๋ฅผ ์ํํ ์ ์์ ๋ ๊น์ง ๋ฐ๋ณตํ๋ค.
โก ์์
โก๏ธ ์์ ๋ ธ๋๋ 1 ์ด๊ณ , ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋๊ฐ ์ฌ๋ฌ๊ฐ ์์ ๋ ๋ฐฉ๋ฌธ ์์๋ ๋ฒํธ๊ฐ ๋ฎ์ ์์ด๋ผ๊ณ ํ์
โก๏ธ ๋ ธ๋์ ๋ฐฐ๊ฒฝ์ ํ์ฌ ์ต์์ ๋ ธ๋์ด๊ณ , ํ์ ๋ฐฐ๊ฒฝ์ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ ๋ ธ๋์ด๋ค.




โก๏ธ ํนํ 6๋ฒ ๋ ธ๋๊น์ง ๋ฐฉ๋ฌธํ์ ๋ ๋ ์ด์ ์ธ์ ๋ ธ๋๊ฐ ์์ผ๋ฏ๋ก ์คํ์์ ๋บด๋ด๊ณ ๋ค์ ์ต์๋จ์ธ 7๋ฒ ๋ ธ๋๋ฅผ ๊ธฐ์ ์ผ๋ก ์ธ์ ๋ ธ๋๋ฅผ ํ์ํ๋ ๊ณผ์ ์ ์ ์ดํดํ ์ ์๋ค๋ฉด ํด๋น ์๊ณ ๋ฆฌ์ฆ์ ์ ์ดํดํ๋ค๊ณ ๋ณผ ์ ์์ ๊ฒ์ด๋ค.
โข ๊ตฌํ ์ฝ๋
public static Main {
public static boolean[] visited = new boolean[(๋
ธ๋์ ๊ฐ์)];
// graph ๊ตฌํ์ ์ํด 2์ฐจ์ ๋ฆฌ์คํธ ์ฌ์ฉ ๋์ ArrayList ๋ฅผ ์ค์ฒฉํ์ฌ ์ฌ์ฉ
public static ArrayList<ArrayList<Integer>> graph = new ArrayList<>();
// DFS ํจ์ ์ ์
public static void dfs (int x) {
// ํ์ฌ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
visited[x] = true;
// ํ์ฌ ๋
ธ๋์ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ๋
ธ๋๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๋ฐฉ๋ฌธ
for (int i=0; i < graph.get(x).size(); i++) {
int y = graph.get(x).get(i);
if (!visited[y]) dfs(y);
}
}
public static void main(String[] args) {
/*
๊ทธ๋ํ ์ฐ๊ฒฐ ์๋ต
*/
dfs(1); // 1๋ฒ ๋
ธ๋๋ถํฐ ์์
}
}
3๏ธโฃ BFS (์ถํ ์ ๋ฆฌ)
โ๏ธ ์ ์ฉ ์์ผ๋ณธ ์์
๐ง ์ถ๊ฐ๋ก ๊ถ๊ธํ ์
'Algorithm ๐ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ์ด๋ถ ํ์ ๐ (Binary Search) (0) | 2023.04.17 |
|---|---|
| ๊ทธ๋ํ๐ (Graph) (0) | 2023.03.21 |
| ๋์ ๊ณํ๋ฒ๐๏ธ (Dynamic Programming) (0) | 2023.03.13 |
| [๐จ ์ปค๋ฎค๋ฌ๋/7๊ธฐ/Java] ] ๊ฐ์ฅ ํฐ ์ (Bubble Sort) (0) | 2022.11.02 |
| [๐จ ์ปค๋ฎค๋ฌ๋/7๊ธฐ/Java] ๊ธฐ์ง๊ตญ ์ค์น (Greedy Algorithm) (0) | 2022.10.26 |