250x250
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 |
Tags
- 추천시스템
- 딥러닝
- 기초
- Regression
- API
- 재귀함수
- 코딩테스트
- 연습
- 프로그래머스
- 템플릿
- 주가예측
- 회귀
- DeepLearning
- 선형회귀
- PyTorch
- 가격맞히기
- 게임
- 주식
- Linear
- CLI
- 흐름도
- 크롤링
- 주식매매
- 알고리즘
- 머신러닝
- 코딩
- 파이썬
- 주식연습
- python
- tensorflow
Archives
- Today
- Total
코딩걸음마
DFS 알고리즘 (graph_탐색) 본문
728x90
DFS 알고리즘
- DFS는 그래프(정점의 수: N, 간선의 수: E)의 모든 간선을 조회한다.
- 인접 리스트로 표현된 그래프: O(N+E)
- 인접 행렬로 표현된 그래프: O(N^2)
- 즉, 그래프 내에 적은 숫자의 간선만을 가지는 희소 그래프(Sparse Graph) 의 경우 인접 행렬보다 인접 리스트를 사용하는 것이 유리하다.
search_object = 7 + 1 #개체의 수(vertex) + 0번 개체(임의)
graph = [
[], # 노드 탐색은 1번부터 하므로, 0번에는 빈 리스트를 입력
[2,3], #1번과 연결된 개체
[1,4,5], #2번과 연결된 개체
[1,4,6], #3번과 연결된 개체
[2,3,5,7], #4번과 연결된 개체
[2,4,7], #5번과 연결된 개체
[3,7], #6번과 연결된 개체
[4,5,6] #7번과 연결된 개체
]
visited = [False]*search_object #방문 이력 리스트
def dfs(graph,v,visited):
visited[v] = True #탐색 후 탐색 결과를 저장
print(v, end=" ") # 탐색 경로를 출력
for i in graph[v]: #연결된 노드중에서
if not visited[i]: # 해당 노드가 not(False) + False(방문하지 않은 노드라면) = True
dfs(graph, i, visited) #그 노드를 기준으로 재귀적으로 방문하도록 설정
print(dfs(graph,1,visited))
#DFS탐색기법은 stack 구조와 같다
코딩테스트에서 기본이지만 가장 직관적으로 이해하기 어려운(재귀함수..) DFS 알고리즘이다.
728x90
'파이썬_꼭_익혀야하는_기초 > 기초부터차근차근_코딩테스트' 카테고리의 다른 글
[프로그래머스] 뉴스 클러스터링 (0) | 2022.07.14 |
---|---|
[프로그래머스] 비밀지도 (0) | 2022.07.14 |
[프로그래머스] 프렌즈4블록 (0) | 2022.07.14 |
[프로그래머스] 다트 게임 (0) | 2022.07.14 |
에라토스테네스의 체 for 코딩테스트 (0) | 2022.06.19 |
Comments