์คํ (LIFO)
stack = []
stack.append(5)
stack.append(2)
stack.append(3)
stack.append(7)
stack.pop()
stack.append(1)
stack.append(4)
stack.pop()
print(stack) # ์ตํ๋จ ์์๋ถํฐ ์ถ๋ ฅ
print(stack[::-1]) # ์ต์๋จ ์์๋ถํฐ ์ถ๋ ฅ
- ๋ณ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด ๋ฆฌ์คํธ์ append(), pop() ๋ฉ์๋ ์ด์ฉ
ํ (FIFO)
from collections import deque
# ํ ๊ตฌํ์ ์ํด deque ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ
queue = deque()
queue.append(5)
queue.append(2)
queue.append(3)
queue.append(7)
queue.popleft()
queue.append(1)
queue.append(4)
queue.popleft()
print(queue) # ๋จผ์ ๋ค์ด์จ ์์๋๋ก ์ถ๋ ฅ
queue.reverse() # ๋ค์ ์ถ๋ ฅ์ ์ํด ์ญ์์ผ๋ก ๋ฐ๊พธ๊ธฐ
print(queue) # ๋์ค์ ๋ค์ด์จ ์์๋ถํฐ ์ถ๋ ฅ
- collections ๋ชจ๋์์ ์ ๊ณตํ๋ deque ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ฉ (์คํ+ํ์ ์ฅ์ )
- ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ๋นผ๋ ์๋๊ฐ ๋ฆฌ์คํธ ์๋ฃํ์ ๋นํด ํจ์จ์ ์ด๋ฉฐ queue ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ณด๋ค ๊ฐ๋จํจ.
- list() ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ฉด deque ๊ฐ์ฒด๋ฅผ ๋ฆฌ์คํธ ์๋ฃํ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์.
์ฌ๊ท ํจ์
- ์๊ธฐ ์์ ์ ๋ค์ ํธ์ถํ๋ ํจ์
- ์ข ๋ฃ ์กฐ๊ฑด ๋ช ์
- ์ปดํจํฐ ๋ด๋ถ์์ ์ฌ๊ท ํจ์์ ์ํ์ ์คํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉ
- ๋ฐ๋ผ์ ์คํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ฉํด์ผ ํ๋ ๋ง์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ๊ท ํจ์๋ฅผ ์ด์ฉํด์ ๊ฐ๋จํ๊ฒ ๊ตฌํ ๊ฐ๋ฅ. ex) DFS
##### ์ฌ๊ท ํจ์ ์์ - ํฉํ ๋ฆฌ์ผ #####
# ๋ฐ๋ณต์ ์ผ๋ก ๊ตฌํํ n!
def factorial_iterative(n):
result = 1
for i in range(1, n+1):
result *= i
return result
# ์ฌ๊ท์ ์ผ๋ก ๊ตฌํํ n!
def factorial_recursive(n):
if n <= 1: # ์ข
๋ฃ ์กฐ๊ฑด
return 1
return n * factorial_recursive(n-1)
print('๋ฐ๋ณต์ ์ผ๋ก ๊ตฌํ:', factorial_iterative(5))
print('์ฌ๊ท์ ์ผ๋ก ๊ตฌํ:', factorial_recursive(5))
๊ทธ๋ํ ํํ
- ์ธ์ ํ๋ ฌ: 2์ฐจ์ ๋ฐฐ์ด๋ก ๊ทธ๋ํ์ ์ฐ๊ฒฐ ๊ด๊ณ๋ฅผ ํํํ๋ ๋ฐฉ์
- ์ธ์ ๋ฆฌ์คํธ: ๋ฆฌ์คํธ๋ก ๊ทธ๋ํ์ ์ฐ๊ฒฐ ๊ด๊ณ๋ฅผ ํํํ๋ ๋ฐฉ์
# ์ธ์ ํ๋ ฌ: 2์ฐจ์ ๋ฐฐ์ด๋ก ๊ทธ๋ํ์ ์ฐ๊ฒฐ ๊ด๊ณ๋ฅผ ํํํ๋ ๋ฐฉ์
INF = 99999999999 # ๋ฌดํ์ ๋น์ฉ ์ ์ธ (์ด๊ธฐํ)
graph = [
[0, 7, 5],
[7, 0, INF],
[5, INF, 0]
]
print(graph)
# ์ธ์ ๋ฆฌ์คํธ: ๋ฆฌ์คํธ๋ก ๊ทธ๋ํ์ ์ฐ๊ฒฐ ๊ด๊ณ๋ฅผ ํํํ๋ ๋ฐฉ์
# ํ(Row)์ด 3๊ฐ์ธ 2์ฐจ์ ๋ฆฌ์คํธ๋ก ์ธ์ ๋ฆฌ์คํธ ํํ
graph = [[] for _ in range(3)]
# ๋
ธ๋ 0์ ์ฐ๊ฒฐ๋ ๋
ธ๋ ์ ๋ณด ์ ์ฅ(๋
ธ๋, ๊ฑฐ๋ฆฌ)
graph[0].append((1, 7))
graph[0].append((2, 5))
# ๋
ธ๋ 1์ ์ฐ๊ฒฐ๋ ๋
ธ๋ ์ ๋ณด ์ ์ฅ(๋
ธ๋, ๊ฑฐ๋ฆฌ)
graph[1].append((0, 7))
# ๋
ธ๋ 2์ ์ฐ๊ฒฐ๋ ๋
ธ๋ ์ ๋ณด ์ ์ฅ(๋
ธ๋, ๊ฑฐ๋ฆฌ)
graph[2].append((0, 5))
print(graph)
DFS (๊น์ด ์ฐ์ ํ์)
- ๊ทธ๋ํ์์ ๊น์ ๋ถ๋ถ์ ์ฐ์ ์ ์ผ๋ก ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ
- ์คํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉ -> ์ฌ๊ท ํจ์
- ๋์ ๊ณผ์
1) ํ์ ์์ ๋ ธ๋๋ฅผ ์คํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
2) ์คํ์ ์ต์๋จ ๋ ธ๋์ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋๊ฐ ์์ผ๋ฉด ๊ทธ ์ธ์ ๋ ธ๋๋ฅผ ์คํ์ ๋ฃ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋๊ฐ ์์ผ๋ฉด ์คํ์์ ์ต์๋จ ๋ ธ๋๋ฅผ ๊บผ๋ธ๋ค.
3) 2๋ฒ์ ๊ณผ์ ์ ๋์ด์ ์ํํ ์ ์์ ๋๊น์ง ๋ฐ๋ณต
- ์ค์ ๋ก๋ ์คํ์ ์ฐ์ง ์์๋ ๋๋ฉฐ, ํ์ ์๊ฐ O(N)
# DFS ํจ์ ์ ์
def dfs(graph, v, visited):
# ํ์ฌ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
visited[v] = True
print(v, end=' ')
# ํ์ฌ ๋
ธ๋์ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ๋
ธ๋๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๋ฐฉ๋ฌธ
for i in graph[v]:
if not visited[i]:
dfs(graph, i, visited)
# ๊ฐ ๋
ธ๋๊ฐ ์ฐ๊ฒฐ๋ ์ ๋ณด๋ฅผ ๋ฆฌ์คํธ ์๋ฃํ์ผ๋ก ํํ(2์ฐจ์ ๋ฆฌ์คํธ)
graph = [
[],
[2, 3, 8],
[1, 7],
[1, 4, 5],
[3, 5],
[3, 4],
[7],
[2, 6, 8],
[1, 7]
]
# ๊ฐ ๋
ธ๋๊ฐ ๋ฐฉ๋ฌธ๋ ์ ๋ณด๋ฅผ ๋ฆฌ์คํธ ์๋ฃํ์ผ๋ก ํํ(1์ฐจ์ ๋ฆฌ์คํธ)
visited = [False] * 9
# ์ ์๋ DFS ํจ์ ํธ์ถ
dfs(graph, 1, visited)
BFS (๋๋น ์ฐ์ ํ์)
- ๊ฐ๊น์ด ๋ ธ๋๋ถํฐ ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ
- ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉ
- ๋์ ๊ณผ์
1) ํ์ ์์ ๋ ธ๋๋ฅผ ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
2) ํ์์ ๋ ธ๋๋ฅผ ๊บผ๋ด ํด๋น ๋ ธ๋์ ์ธ์ ๋ ธ๋ ์ค์์ ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋๋ฅผ ๋ชจ๋ ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
3) 2๋ฒ์ ๊ณผ์ ์ ๋์ด์ ์ํํ ์ ์์ ๋๊น์ง ๋ฐ๋ณต
- O(N). ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ ์ค์ ์ํ ์๊ฐ์ DFS๋ณด๋ค ์ข์ ํธ.
from collections import deque
# BFS ํจ์ ์ ์
def bfs(graph, start, visited):
# ํ(Queue) ๊ตฌํ์ ์ํด deque ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ
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
# ๊ฐ ๋
ธ๋๊ฐ ์ฐ๊ฒฐ๋ ์ ๋ณด๋ฅผ ๋ฆฌ์คํธ ์๋ฃํ์ผ๋ก ํํ(2์ฐจ์ ๋ฆฌ์คํธ)
graph = [
[],
[2, 3, 8],
[1, 7],
[1, 4, 5],
[3, 5],
[3, 4],
[7],
[2, 6, 8],
[1, 7]
]
# ๊ฐ ๋
ธ๋๊ฐ ๋ฐฉ๋ฌธ๋ ์ ๋ณด๋ฅผ ๋ฆฌ์คํธ ์๋ฃํ์ผ๋ก ํํ(1์ฐจ์ ๋ฆฌ์คํธ)
visited = [False] * 9
# ์ ์๋ BFS ํจ์ ํธ์ถ
bfs(graph, 1, visited)
์์ 1. ์๋ฃ์ ์ผ๋ ค ๋จน๊ธฐ
n, m = map(int, input().split())
list = [[] for _ in range(n)]
for i in range(n):
data = input()
for j in range(m):
list[i].append(int(data[j]))
def dfs(x, y):
if x < 0 or x >= n or y < 0 or y >= m: # x, y ์ขํ๊ฐ ๋งต์ ๋ฒ์ด๋๋ฉด
return False
if list[x][y] == 0: # ์ผ์ ํ์ ๊ตฌ๋ฉ์ด ๋ซ๋ ค ์๋ ๋ถ๋ถ
list[x][y] = 1 # ๋ฐฉ๋ฌธ ์ฒดํฌ
# ์, ํ, ์ข, ์ฐ ์ฒดํฌ
dfs(x+1, y)
dfs(x-1, y)
dfs(x, y+1)
dfs(x, y-1)
return True
else:
return False
result = 0
for i in range(n):
for j in range(m):
if dfs(i, j) == True:
result += 1
print(result)
- DFS๋ก ํ ์ ์๋ค.
1) ํน์ ํ ์ง์ ์ ์ฃผ๋ณ ์, ํ, ์ข, ์ฐ ์ดํด๋ณธ ๋ค์
์ฃผ๋ณ ์ง์ ์ค ๊ฐ์ด '0'์ด๋ฉด์ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์ง์ ์ด ์๋ค๋ฉด ํด๋น ์ง์ ๋ฐฉ๋ฌธ
2) ๋ฐฉ๋ฌธํ ์ง์ ์์ ๋ค์ ์, ํ, ์ข, ์ฐ ์ดํผ๋ฉด์ ๋ฐฉ๋ฌธ ๋ค์ ์งํ
์์ 2. ๋ฏธ๋ก ํ์ถ
๋ ์์ฃผ ํ๋๊ฒ ํ ๋ฌธ์ ์,,,,,, ์์ ์ฝ๋๋ ์๊ณ ๋ฆฌ์ฆ ๋๊ฐ์๋ฐ ๋ด ์ฝ๋๋ ์ค๋ฅ ๋ธ,,,
๋์ฒด ๋ญ๊ฐ ๋ฌธ์ ์ธ๊ฑธ๊น,,,,,,,,,,,,,,,,,,,,,,,,,
from collections import deque
# N, M์ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ๊ตฌ๋ถํ์ฌ ์
๋ ฅ ๋ฐ๊ธฐ
n, m = map(int, input().split())
# 2์ฐจ์ ๋ฆฌ์คํธ์ ๋งต ์ ๋ณด ์
๋ ฅ ๋ฐ๊ธฐ
graph = []
for i in range(n):
graph.append(list(map(int, input())))
# ์ด๋ํ ๋ค ๊ฐ์ง ๋ฐฉํฅ ์ ์ (์, ํ, ์ข, ์ฐ)
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
# BFS ์์ค์ฝ๋ ๊ตฌํ
def bfs(x, y):
# ํ(Queue) ๊ตฌํ์ ์ํด deque ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ
queue = deque()
queue.append((x, y))
# ํ๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณตํ๊ธฐ
while queue:
x, y = queue.popleft()
# ํ์ฌ ์์น์์ 4๊ฐ์ง ๋ฐฉํฅ์ผ๋ก์ ์์น ํ์ธ
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
# ๋ฏธ๋ก ์ฐพ๊ธฐ ๊ณต๊ฐ์ ๋ฒ์ด๋ ๊ฒฝ์ฐ ๋ฌด์
if nx < 0 or nx >= n or ny < 0 or ny >= m:
continue
# ๋ฒฝ์ธ ๊ฒฝ์ฐ ๋ฌด์
if graph[nx][ny] == 0:
continue
# ํด๋น ๋
ธ๋๋ฅผ ์ฒ์ ๋ฐฉ๋ฌธํ๋ ๊ฒฝ์ฐ์๋ง ์ต๋จ ๊ฑฐ๋ฆฌ ๊ธฐ๋ก
if graph[nx][ny] == 1:
graph[nx][ny] = graph[x][y] + 1
queue.append((nx, ny))
# ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ ๋ฐํ
return graph[n - 1][m - 1]
# BFS๋ฅผ ์ํํ ๊ฒฐ๊ณผ ์ถ๋ ฅ
print(bfs(0, 0))
- BFS๋ก ํ ์ ์๋ค.
์ญ์ ๊ทธ๋ํ ํ์ ๋ฌธ์ ๋ ์ด๋ ต๋ค
๋๋ ์ ๋ง ์
'๐ค > ์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ด์ง ํ์ ์๊ณ ๋ฆฌ์ฆ (Binary Search Algorithm) (0) | 2022.02.10 |
---|---|
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ (Sorting Algorithm) (0) | 2022.02.04 |
๊ตฌํ ์๊ณ ๋ฆฌ์ฆ (Implementation Algorithm) (0) | 2022.01.26 |
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ (Greedy Algorithm) (0) | 2021.09.23 |
Selection Sort, Merge Sort ์ ํ์ฑ ๋ฐ ์๊ฐ๋ณต์ก๋ ์ฆ๋ช (0) | 2021.09.17 |