스택 Stack
- 선입후출 First in Last out 구조 또는 후입선출 Last in First out 구조
# 스택 예제
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]) # 최상단 원소부터 출력

큐 Queue
- 선입선출 First in First out 구조
# 큐 예제
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) # 나중에 들어온 원소부터 출력

재귀함수
# 재귀 함수 종료 예제
def recurive_function(i):
if i == 10:
return
print(i, '번째 재귀 함수에서', i+1, '번째 재귀 함수를 호출합니다.')
recurive_function(i+1)
print(i, '번째 재귀 함수를 종료합니다.')
recurive_function(1)

# 팩토리얼 예제
## 반복적으로 구현
def factorial_iterative(n):
result = 1
for i in range(1, n+1):
result *= i
return result
print('반복적으로 구현:', factorial_iterative(5))
## 재귀적으로 구현
def factorial_recursive(n):
if n <= 1:
return 1
return n * factorial_recursive(n-1)
print('재귀적으로 구현:', factorial_recursive(5))

탐색 알고리즘
- 인접 행렬 방식: 모든 관계를 저장함. 메모리를 불필요하게 낭비함. 정보를 얻는 속도 빠름.
- 인접 리스트 방식: 연결된 정보만 저장함. 메모리를 효율적으로 사용함. 정보를 얻는 속도 느림.
DFS (깊이 우선 탐색)
- 동작원리: 스택
- 구현 방법: 재귀 함수 이용
# 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)
graph = [ #인접 리스트 방식(연결된 정보만 저장)
[],
[2,3,8],
[1,7],
[1,4,5],
[3,5],
[3,4],
[7],
[2,6,8],
[1,7]
]
visited = [False] * 9
dfs(graph, 1, visited)

BFS(너비 우선 탐색)
시간복잡도 = O(N)
※ DFS보다는 BFS 구현이 조금 더 빠르게 동작함. ※
- 동작 원리: 큐
- 구현 방법: 큐 자료구조 이용 (deque)
# 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
graph = [ #인접 리스트 방식(연결된 정보만 저장)
[],
[2,3,8],
[1,7],
[1,4,5],
[3,5],
[3,4],
[7],
[2,6,8],
[1,7]
]
visited = [False] * 9
bfs(graph, 1, visited)

실전 문제 5-3. 음료수 얼려먹기
'coding-test > 이것이 코딩 테스트다' 카테고리의 다른 글
| [이것이 코딩 테스트다] CH06. 정렬 (0) | 2023.01.15 |
|---|---|
| [이것이 코딩 테스트다] CH04. 구현 (0) | 2023.01.13 |
| [이것이 코딩 테스트다] CH03. 그리디 (0) | 2023.01.09 |
| [이것이 코딩 테스트다] CH01. 코딩 테스트 개요 (0) | 2023.01.02 |
| [이것이 코딩 테스트다] (0) | 2023.01.02 |