[Alg] Search Algorithms - Essential Data Structure

meredith·2021년 7월 30일
0

Alg

목록 보기
8/9

꼭 필요한 자료구조 기초

탐색(Search) : 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정
대표적인 탐색 알고리즘 : DFS, BFS

Stack

"선입후출" "First In Last Out(FILO)"
"후입선출" "Last In First Out(LIFO)"

박스 쌓기와 같은 구조

삽입 : 아래에서부터 위로 차곡차곡 박스를 쌓는 것과 같음
삭제 : 맨 위부터 박스를 빼는 것과 같음

만약 삽입 순서가 5-2-3-7 이라면 가장 먼저 삭제되는 것은 7이다.

파이썬에선 기본 리스트에 append(), pop() 메서드를 제공하기 때문에 stack 구현은 기본 리스트를 사용한다.
append() : 리스트의 가장 뒤에 데이터 삽입
pop() : 리스트의 가장 뒤의 데이터 삭제

stack example

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])

결과
[5,2,3,1][1,3,2,5]

Queue

"선입선출" "First In First Out"

대기 줄과 같은 구조

먼저 온 사람이 먼저 들어가게 된다.

삽입, 삭제 모두 앞 순서부터 차례대로 진행된다.

만약 5-2-3-7 순서로 삽입했다면 5-2-3-7 순서로 삭제된다.

파이썬으로 큐를 구현할 떄는 collections 모듈에서 제공하는 deque 자료구조 활용
deque는 스택과 큐의 장점을 모두 채택한 것인데 데이터를 넣고 빼는 속도가 리스트 자료형에 비해 효율적이며 queue 라이브러리를 이용하는 것보다 더 간단하다.
(대부분의 코딩테스트에서 collections 모듈과 같은 기본 라이브러리 사용은 허용함)

append() : deque 맨 뒤에 데이터 삽입
popleft() : deque 맨 앞 데이터 삭제

queue example

from collections import 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)

결과
deque([3,7,1,4])
deque([4,1,7,3])

만약 deque 객체를 리스트로 만들고 싶다면 list() 메서드 사용
list(queue)

profile
해보자고 가보자고

0개의 댓글