- 단순 Brute Force
- 순열, 조합
- 재귀 함수
- 비트마스크
- BFS, DFS
🔔 python에서의 완전탐색
import itertools
# product : 곱집합
itertools.product(list1, list2, _ [repeat=1]
# permutations : 순열
# 가능한 모든 순서를 반환, 반복되는 요소 없음
# r 값에 따라 조합 수가 정해짐
itertools.permutations(list, r)
# combinations : 조합
# 반복되는 요소가 없는 정렬된 순서
itertools.combinations(list, r)
# combinations_with_replacement : 중복이 가능한 조합
# 조합에서 개별 요소마다 두 번 이상 반복 가능
itertools.combinations_with_replacement(list, r)
🔔 재귀함수를 이용한 순열 구현
def permutations(arr, r):
result = []
def permute(p, index):
if len(p) == r:
result.append(p)
return
for idx, data in enumerate(arr):
if idx not in index:
permute(p + [data], index + [idx])
permute([], [])
return result
for r in permutations(['A', 'B', 'C', 'D'], 2):
print(r)
🔔 재귀함수를 이용한 조합 구현
def combinations(arr, r):
result = []
def combinate(c, index):
if len(c) == r:
result.append(c)
return
for idx, data in enumerate(arr):
if idx > index:
combinate(c + [data], idx)
combinate([], -1)
return result
for r in combinations(['A', 'B', 'C', 'D'], 2):
print(r)
🔔 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)
visited = [False] * 9 # 방문 정보를 리스트로 표현
# 각 노드가 연결된 정보를 리스트로 표현
graph =[
[], # 0번 노드와 연결된 노드 정보
[2, 3, 8], # 1번 노드와 연결된 노드 정보
[1, 7], # 2번 노드와 연결된 노드 정보
[1, 4, 5], # 3번 노드와 연결된 노드 정보
[3, 5], # 4번 노드와 연결된 노드 정보
[3, 4], # 5번 노드와 연결된 노드 정보
[7], # 6번 노드와 연결된 노드 정보
[2, 6, 8], # 7번 노드와 연결된 노드 정보
[1, 7] # 8번 노드와 연결된 노드 정보
]
dfs(graph, 1, visited)
🔔 BFS(너비 우선 탐색)
from collections import deque
def bfs(graph, start, visited):
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
visited = [False] * 9 # 방문 정보를 리스트로 표현
# 각 노드가 연결된 정보를 리스트로 표현
graph =[
[], # 0번 노드와 연결된 노드 정보
[2, 3, 8], # 1번 노드와 연결된 노드 정보
[1, 7], # 2번 노드와 연결된 노드 정보
[1, 4, 5], # 3번 노드와 연결된 노드 정보
[3, 5], # 4번 노드와 연결된 노드 정보
[3, 4], # 5번 노드와 연결된 노드 정보
[7], # 6번 노드와 연결된 노드 정보
[2, 6, 8], # 7번 노드와 연결된 노드 정보
[1, 7] # 8번 노드와 연결된 노드 정보
]
bfs(graph, 1, visited)