Data Structure

[이코테] 부스러기: 방향벡터/ 스택, 큐, 재귀함수 for 탐색 알고리즘

yuull 2022. 2. 25. 23:53

#방향벡터

좌표 구현 문제에서 방향벡터를 이용하여 좌표를 이동시키기.

방향벡터란 방향을 나타내는 벡터. 

예를 들어서

dx=[-1,1,0,0]

dy=[0,0,-1,1]

각각의 i번째 원소를 현재 x,y 좌표에 각각 더해주면 이동이 됨.

또는 

moves=[(-1,-1),(-1,0), ... ] 처럼 하나의 리스트로 나타낼 수도 있음.

 

#탐색

탐색이란 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정

그래프 탐색 알고리즘 DFS/BFS

 

-스택: 리스트로 구현. append(*), pop()

최상단 원소부터 출력 > print(list[::-1]

최하단 원소부터 출력 > print(list)

-큐: 리스트로도 가능하나 비효율적. deque(덱) 라이브러리 이용

from collections import deque

queue=deque()

queue.append(*)

queue.popleft()

queue.reverse()

print(queue)

-재귀함수: 자기 자신을 다시 호출하는 함수 => 반복 가능

단 문제풀이시 반드시 재귀함수의 종료 조건 명시. 무한루프 방지.

--유클리드 호제법: 두 자연수의 최대공약수를 구하는 알고리즘

모든 재귀함수는 반복문을 이용하여 동일한 기능 구현 가능. 반대도 마찬가지.

컴퓨터가 함수를 재귀적으로 (연속적으로) 호출하면 컴퓨터 메모리 내부의 스택 프레임에 쌓임.

-> so 스택 사용시 구현상 스택 라이브러리 대신 재귀함수 이용하는 경우가 많다. (DFS)

 

#DFS

...2/25 이어서:

https://minheedg.tistory.com/21

 

[이코테] DFS 와 BFS 개념

* <이것이 취업을 위한 코딩테스트다 with 파이썬> 책과 강의를 참고하여 작성하였습니다. DFS: Depth-First-Search 깊이우선탐색 - 멀리 있는 노드를 우선으로 탐색. 스택 자료구조 사용하나, 스택말고

minheedg.tistory.com