일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 가끔은_말로
- 플로이드 와샬
- 자바스크립트
- 가끔은 말로
- 미래는_현재와_과거로
- 크루스칼
- dropout
- 조합론
- 분할 정복
- dfs
- c++
- 이분 탐색
- BFS
- 회고록
- back propagation
- 우선 순위 큐
- DP
- NEXT
- Overfitting
- 세그먼트 트리
- 백트래킹
- 다익스트라
- 2023
- object detection
- 문자열
- pytorch
- tensorflow
- 알고리즘
- 너비 우선 탐색
- lazy propagation
Archives
- Today
- Total
Doby's Lab
Python, Adj List, Global Variable, Recursive call 본문
바로 직전의 포스팅에서 Python을 이용하여 DFS를 구현해보았는데 C++에서는 당연히 사용하던 테크닉들을 정리하여 보았습니다.
[Adjust List 구현]
adj = [[] for i in range(0, n)]
[Global Variable]
DFS 코드의 일부분입니다. 문제를 풀면서 당황했던 부분이 이 부분이었습니다. '왜 result에 cnt값이 할당이 안 되지?' 이유를 찾아보았더니 Python에서는 함수 외부에 선언된 전역 변수를 사용하려면 함수 안에서 같은 변수 명의 Global 변수 선언을 해주어야 했습니다.
...
result = -1
def dfs(node, cnt):
if node == k:
global result #global 변수를 사용하여 전역변수를 사용하겠다는 뜻
result = cnt
...
[Recursive Call Function]
Recursive Call Function의 첫 구현이면서 Function 자체의 첫 구현이었습니다. 이 부분은 C++과 크게 다른 점이 없어서 혼란이 없었습니다.
def dfs(node, cnt):
if node == k:
global result #global 변수를 사용하여 전역변수를 사용하겠다는 뜻
result = cnt
return
for i in range(0, len(adj[node])):
nxt = adj[node][i]
if visited[nxt] == False:
visited[nxt] = True
dfs(nxt, cnt + 1)
visited[nxt] = False
C++로 풀어본 문제를 Python을 이용하여 코드를 거의 똑같이 작성하며 풀어보았는데 메모리나 시간을 C++보다 어마하게 잡아먹더군요.(입출력을 빠르게 해도)
웬만하면 C++로만 PS를 해야겠습니다 :)
728x90
'Code about AI > Python' 카테고리의 다른 글
파이썬의 클래스(Class)에 대하여 (2) | 2022.12.08 |
---|---|
백준 23572번: 승택이의 은밀한 비밀번호 (Python) (0) | 2022.07.24 |
코드업 Python 기초 100제 정리 (0) | 2022.06.26 |
[파이썬] 백준 1350번: 진짜 공간, 리스트(List) (0) | 2022.03.01 |
[Python] 백준 1264번: 모음의 개수, if ~ in, for 문자 in 문자열 (0) | 2022.03.01 |