์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- OOP์ ํน์ง
- java ๋๊ธฐํ
- ๋ฐฑํธ๋ํน
- Spring Security ๋ฒ์ ๋ฌธ์
- ๊ธฐ์ฌ๋จ์์ ๋ฌด๊ธฐ ํ์ด์ฌ
- Spring Security 5
- ๋น๋๊ด๋ฆฌ๋๊ตฌ
- ํ๋ก์ธ์ค
- RDBMS์ NoSQL ์ฐจ์ด
- MySQL RIGHT()
- PCB
- build.gradle ์ค์ ์ค๋ฅ
- @RequestMapping๊ณผ @GetMapping
- ๋น๋๊ด๋ฆฌ๋๊ตฌ ์ฐจ์ด
- Python 1000000007
- ์น ๋์ ๊ณผ์
- finalize ์๋ ํธ์ถ
- ๊ธฐ์ฌ๋จ์์ ๋ฌด๊ธฐ ์ ๊ณฑ๊ทผ
- DDL DML DCL ์ฐจ์ด
- commit message convention
- ๋ฌ๋ฆฌ๊ธฐ ๊ฒฝ์ฃผ ํ์ด์ฌ
- ๋ชจ๋๋ก ์ฐ์ฐ
- ํ๋ก๊ทธ๋๋จธ์ค 142086
- ์คํ๋ง ๋ถํธ์ AWS๋ก ํผ์ ๊ตฌํํ๋ ์น ์๋น์ค
- ๋ฌ๋ฆฌ๊ธฐ ๊ฒฝ์ฃผ ํ์ด์ฌ ์๊ฐ์ด๊ณผ
- ์ ๊ทํ ์ฅ๋จ์
- MySQL LEFT()
- www.google.com๏ปฟ ๊ฒ์ํ๋ฉด ์ผ์ด๋๋ ์ผ
- ์ด์ฝํ 2021
- ์๊ณ ๋ฆฌ์ฆ 1000000007 ๋๋๊ธฐ
- Today
- Total
BUILD_SSO
DFS/BFS ์๊ณ ๋ฆฌ์ฆ ๋ณธ๋ฌธ
๐DFS, BFS๋ฅผ ์์๋ณด๊ธฐ์ ์์์ผํ๋ ์๋ฃ๊ตฌ์กฐ์ ๊ฐ๋
ํ์(search)
๋ง์ ์์ ๋ฐ์ดํฐ ์ค์์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋ ๊ณผ์ ์ ๋งํ๋ค.
์คํ(stack)
- FILO(First In Last Out): ๋ฐ์ค ์๊ธฐ
- list๋ก ๊ฐํธํ๊ฒ ๊ตฌํ ๊ฐ๋ฅ(์ฝ์ : append, ์ญ์ : pop)
- ์๊ฐ๋ณต์ก๋: O(1)
ํ(queue)
- FIFO(First In First Out): ์ ๊ตฌ๋ ์ถ๊ตฌ๊ฐ ๋ชจ๋ ๋ซ๋ ค์๋ ํฐ๋
- from collections import deque(์ฝ์ : append, ์ญ์ : popleft)
- ์๊ฐ๋ณต์ก๋: O(1)
์ฌ๊ทํจ์(recursive function)
- ์๊ธฐ ์์ ์ ๋ค์ ํธ์ถํ๋ ํจ์
- python ์์๋ '์ต๋ ์ฌ๊ท ๊น์ด ์ ํ'์ด ์๊ธฐ ๋๋ฌธ์ ๋ณ๋ค๋ฅธ ์ค์ ์ด ์๋ค๋ฉด ์ค๋ฅ๋ฉ์ธ์ง์ํจ๊ป ์ข
๋ฃ๋๊ฒ ๋๋ค.
- ์ผ๋ฐ์ ์ธ ๋ฌธ์ ํ์ด ๊ฒฝ์ฐ(์ผ๋ถ๋ฌ ๋ฌดํ๋ฃจํ๋ฅผ ๋ง๋ค์ง ์๋ ๊ฒฝ์ฐ)์๋ ์ฌ๊ท ํจ์์ ์ข
๋ฃ ์กฐ๊ฑด์ ๋ฐ๋์ ๋ช
์ํด์ผ ํ๋ค.
- ๋ชจ๋ ์ฌ๊ทํจ์๋ ๋ฐ๋ณต๋ฌธ์ ์ด์ฉํ์ฌ ๋์ผํ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๋ค.
- ์ปดํจํฐ๊ฐ ํจ์๋ฅผ ์ฌ๊ท์ ์ผ๋ก ํธ์ถํ๊ฒ ๋๋ฉด, ์ปดํจํฐ ๋ฉ๋ชจ๋ฆฌ ๋ด๋ถ์ ์คํ ํ๋ ์์ ์์ด๊ฒ ๋๋ค.
=> ์ด๋ฌํ ํน์ง๋๋ฌธ์ ์คํ์ ์ฌ์ฉํด์ผ ํ ๋ ๊ตฌํ์ ์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋์ ์ ์ฌ๊ทํจ์๋ฅผ ์ด์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
(ex. ๋จ์ํ ๋ ์งง๊ณ ๊ฐ๊ฒฐํ๊ฒ ์์ฑํ๊ธฐ์ํด(dfs))
๐ตDFS(Depth First Search)
- ๊น์ด ์ฐ์ ํ์, ๊ทธ๋ํ์์ ๊น์ ๋ถ๋ถ์ ์ฐ์ ์ ์ผ๋ก ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
- ์คํ ์๋ฃ๊ตฌ์กฐ(or ์ฌ๊ทํจ์)๋ฅผ ์ด์ฉํ๋ค.
=> 1. ํ์ ์์ ๋
ธ๋๋ฅผ ์คํ์ ์ฝ์
ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
2. ์คํ์ ์ต์๋จ ๋
ธ๋์ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ํ ๋
ธ๋๊ฐ ํ๋๋ผ๋ ์๋ค๋ฉด, ๊ทธ ๋
ธ๋๋ฅผ ์คํ์ ๋ฃ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋
ธ๋๊ฐ ์์ผ๋ฉด ์คํ์์ ์ต์๋จ ๋
ธ๋๋ฅผ ๊บผ๋ธ๋ค.
**์ฆ, ๋งค๋ฒ ์ต์๋จ ๋
ธ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋
ธ๋๊ฐ ์์ผ๋ฉด ๊ทธ ์ธ์ ํ ๋
ธ๋๋ก๋ ๋ฐฉ๋ฌธ์ ์ํํ๋ ๊ฒ.
3. 2๋ฒ์ ๊ณผ์ ์ ๋ ์ด์ ์ํํ ์ ์์ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
- ๊ทธ๋ํ ๋ฌธ์ ๊ฐ ์ถ์ ๋๋ฉด ๋
ธ๋์ ๋ฒํธ๊ฐ 1๋ฒ๋ถํฐ ์์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ list์ 0๋ฒ index๋ ๋น์ฐ๊ณ index 1๋ถํฐ ์์ํ๋๋ก ํ๋ค.
๐ตBFS(Breadth First Search)
- ๋๋น ์ฐ์ ํ์, ๊ทธ๋ํ์์ ๊ฐ๊น์ด ๋
ธ๋๋ถํฐ ์ฐ์ ์ ์ผ๋ก ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
- ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ๋ค.
=> 1. ํ์ ์์ ๋
ธ๋๋ฅผ ํ์ ์ฝ์
ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
2. ํ์์ ๋
ธ๋๋ฅผ ๊บผ๋ธ ๋ค์ ํด๋น ๋
ธ๋์ ์ธ์ ๋
ธ๋ ์ค์์ ๋ฐฉ๋ฌธํ์ง ์์ ๋
ธ๋๋ฅผ ๋ชจ๋ ํ์ ์ฝ์
ํ๊ณ ๋ฐฉ๋ฌธ์ฒ๋ฆฌํ๋ค.
**ํด๋น ์์ ์์ ์ธ์ ํ ๋
ธ๋๋ฅผ 'ํ๋ฒ์' ๋ชจ๋ ํ์ ๋ฃ๋๋ค๋ ๊ฒ์ด ํน์ง์ด๋ค.
3. 2๋ฒ์ ๊ณผ์ ์ ๋ ์ด์ ์ํํ ์ ์์ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
DFS ์์ค์ฝ๋ ์์
#์ฌ๊ทํจ์๋ฅผ ํตํ ๊ตฌํ
def dfs(graph, v, visit): #visit; ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ ์ฌ๋ถ๊ฐ ๊ธฐ๋ก๋์ด ์๋ ๋ฆฌ์คํธ
visit[v] = True #ํด๋น ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ํด์ค
print(v, end=' ') #๊ทธ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ค๋ ์๋ฏธ๋ก ํด๋น ๋
ธ๋๋ฅผ ์ถ๋ ฅํ ์ ์๋๋ก ํจ
#ํ์ฌ ํ์ธํ๊ณ ์๋ = ์คํ์ ์ต์๋จ ๋
ธ๋์ ํด๋นํ๋ ์์์ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ๋
ธ๋๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๋ฐฉ๋ฌธ
for i in graph[v]:
if not visit[i]: #๋ง์ฝ ๊ทธ ๋
ธ๋๊ฐ = ์ฆ ์ธ์ ํ ๋
ธ๋๊ฐ ๋ฐฉ๋ฌธ๋์ง ์์ ์ํ๋ผ๋ฉด,
dfs(graph, i, visit) #์ฌ๊ท ํจ์๋ฅผ ์ด์ฉํด ๋ฐฉ๋ฌธ์ ์งํํ๋ค
#2์ฐจ์ ๋ฆฌ์คํธ ํํ๋ก ๊ฐ ๋
ธ๋๊ฐ ์ฐ๊ฒฐ๋ ์ ๋ณด๋ฅผ ํํํด์ค
graph = [
[], #๋
ธ๋์ ๋ฒํธ๊ฐ 1๋ฒ๋ถํฐ ์์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ํธ์์ 0๋ฒ INDEX๋ฅผ ๋น์์ค
[2, 3, 8], #์ธ๋ฑ์ค ๊ธฐ์ค์ผ๋ก ์ฐ๊ฒฐ์ ํํํด์ค; 1๋ฒ ๋
ธ๋์ ์ฐ๊ฒฐ๋๊ฑด 2, 3, 8 ๋ฒ ๋
ธ๋๋ผ๋ ๋ป
[1, 7],
[1, 4, 5],
[3, 5],
[3, 4],
[7],
[2, 6, 8],
[1, 7]
]
#๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ๊ฐ๋ค์ False๊ฐ์ผ๋ก ์ด๊ธฐํํด์ ์ฒ์์๋ ๋ชจ๋ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ์ง ์์ ๊ฒ ์ฒ๋ผ ์ฒ๋ฆฌํ ์ ์๋ค.
#index 0์ ์ฌ์ฉํ์ง ์๊ฒ ํ๊ธฐ์ํด 9๋ฅผ ๊ณฑํจ
#๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ์ํด ํ๋์ 1์ฐจ์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด์ค
visit = [False] * 9
dfs(graph, 1, visit)
BFS ์์ค์ฝ๋ ์์
from collections import deque
def bfs(graph, start, visited):
#์์ ๋
ธ๋๋ฅผ queue์ ๋ฃ์ด์ค.
queue = deque([start])
#์์ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธ์ฒ๋ฆฌํ๋ค.
#๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋, ์คํ์ ํ ๋ฒ์ด๋ผ๋ ์ฝ์
๋ ๋
ธ๋๋ฅผ ๋ค์ ์ฝ์
ํ์ง ์๋๋ก ์ฒดํฌํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ฆ, ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํจ์ผ๋ก์จ ๊ฐ ๋
ธ๋๋ฅผ ํ ๋ฒ์ฉ๋ง ์ฒ๋ฆฌํ ์ ์๊ฒ ํฉ๋๋ค.
visited[start] = True
#์ดํ์ ํ๊ฐ ๋น๋๊น์ง = ๋์ด์ ์ํํ ์ ์์ ๋ ๊น์ง ๋ฐ๋ณตํ๋ค.
while queue:
v = queue.popleft() #ํ์์ ์์๋ฅผ ํ๋ ๊บผ๋ธ๋ค.
print(v, end=' ')
for i in graph[v]: #๊บผ๋ธ ๋
ธ๋์ ์ธ์ ํ ๋
ธ๋๋ฅผ ํ๋์ฉ ํ์ธ
if not visited[i]: #์์ง ๋ฐฉ๋ฌธํ์ง ์์๊ฒ ์๋ค๋ฉด
queue.append(i) #ํ์ ๋ค ๋ฃ์ด์ฃผ๋๋ก ํ๋ค.
visited[i] = True
#๊ฐ ๋
ธ๋๊ฐ ์ฐ๊ฒฐ๋ ์ ๋ณด๋ฅผ ํํ(๊ทธ๋ํ๋ฅผ ํํํ ๋ถ๋ถ)
graph = [
[], #0๋ฒ ๋
ธ๋์ ๋ํ ๋ถ๋ถ์ ๋น์์ค๋ค.(์ฌ์ฉx)
[2,3,8], #1๋ฒ ๋
ธ๋๊ฐ ์ธ์ ํด์๋ ๋
ธ๋๋ค
[1,7], #2๋ฒ ๋
ธ๋๊ฐ ...
[1,4,5],
[3,5],
[3,4],
[7],
[2,6,8],
[1,7],
]
#๋ฐฉ๋ฌธ์ฒ๋ฆฌ ๋ชฉ์ ์ผ๋ก visited ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด์ค
visited = [False]*9
bfs(graph, 1, visited)
*์ด๊ฒ์ด ์ทจ์ ์ ์ํ ์ฝ๋ฉ ํ ์คํธ๋ค 2021 ์ ํ๋ธ ๊ฐ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ์์ฑํ์ต๋๋ค.
'Problem Solving > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 14889 ์คํํธ์ ๋งํฌ python - ๋ฐฑํธ๋ํน, ์กฐํฉ (0) | 2023.03.24 |
---|---|
[๋ฐฑ์ค] 14888 ์ฐ์ฐ์ ์ฐ์ ์์ python - ๊ตฌํ, ๋ฐฑํธ๋ํน (0) | 2023.03.22 |
Bruteforce: ๋ธ๋ฃจํธํฌ์ค/์์ ํ์ ์๊ณ ๋ฆฌ์ฆ (+๊ตฌํ) (0) | 2023.03.22 |
Greedy: ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ (0) | 2023.03.18 |
[๋ฐฑ์ค] 2178 ๋ฏธ๋กํ์ python - BFS (0) | 2023.03.09 |