매일은 아니더라도 꾸준하게
728x90

알고리즘이론 4

[알고리즘이론] 오일러 경로(Eulerian path) 파이썬으로 구현하기

오일러 경로(Eulerian path)는 그래프의 모든 간선을 한 번씩만 방문하면서 출발점과 도착점이 다른 경로입니다. 파이썬으로 오일러 경로를 구하는 알고리즘은 다음과 같습니다. 그래프가 오일러 경로가 되는지 확인합니다. 이를 위해서는 그래프가 무방향 그래프이고 모든 정점의 차수가 짝수이거나, 정확히 두 개의 정점의 차수가 홀수이어야 합니다. 오일러 경로가 있다면 시작 정점을 선택합니다. 시작 정점은 차수가 홀수인 정점 중 임의의 하나를 선택하거나, 그렇지 않으면 아무 정점이나 선택할 수 있습니다. 시작 정점에서 출발하여 갈 수 있는 경로가 있는 동안 이동합니다. 이동한 경로는 스택에 저장합니다. 이동한 경로의 마지막 노드에서 출발하여 갈 수 있는 경로가 있는 동안 이동합니다. 이동한 경로도 스택에 저..

[알고리즘이론] DP(Dynamic Programming : 동적 프로그래밍) 파이썬으로 구현하기

DP(Dynamic Programming)는 이전에 계산한 값을 저장해 놓고 재활용하여 중복 계산을 줄이는 알고리즘 기법입니다. 파이썬에서는 DP를 구현하는 방법은 여러가지가 있습니다. 여기서는 Memoization 방식과 Bottom-up 방식을 예제 코드로 설명하겠습니다. Memoization 방식 Memoization은 이전에 계산한 값을 저장하고 재활용하는 방식입니다. 이전에 계산한 값이 필요할 때마다 값을 조회하여 사용합니다. Memoization 방식은 보통 재귀 함수와 함께 사용됩니다. 아래는 Memoization 방식을 사용하여 피보나치 수열을 구하는 예제 코드입니다. # Memoization 방식으로 구현한 피보나치 수열 예제 memo = [0] * 100 # 메모이제이션을 위한 리스트 ..

[알고리즘이론] 파이썬 자료구조

파이썬에서는 다양한 자료구조를 제공합니다. 각 자료구조의 특징과 사용 방법을 살펴보겠습니다. 리스트(List) 리스트는 순서가 있는 데이터의 집합으로, 대괄호([])로 표현합니다. 원소들은 쉼표로 구분합니다. 리스트는 수정이 가능하며, 인덱싱과 슬라이싱을 통해 데이터를 접근할 수 있습니다. 예시: a = [1, 2, 3, 4, 5] # 리스트 생성 print(a) # [1, 2, 3, 4, 5] print(a[0]) # 1 print(a[2:4]) # [3, 4] a[1] = 10 # 리스트 값 수정 print(a) # [1, 10, 3, 4, 5] 튜플(Tuple) 튜플은 리스트와 유사하지만, 수정이 불가능합니다. 소괄호(())로 표현합니다. 예시: a = (1, 2, 3) # 튜플 생성 print(a..

[알고리즘이론] 파이썬으로 BFS 구현

BFS(Breadth-First Search)는 큐(Queue)를 이용하여 구현할 수 있습니다. 큐는 선입선출(FIFO) 구조이므로, BFS에서는 현재 노드와 인접한 노드 중 방문하지 않은 노드가 있으면 해당 노드를 큐에 삽입하고 방문 처리합니다. 그리고 큐에서 꺼낸 노드를 다시 시작점으로 하여 인접한 노드 중 방문하지 않은 노드가 있으면 큐에 삽입하고 방문 처리합니다. 이 과정을 큐가 빌 때까지 반복하면 됩니다. 아래는 큐를 사용하여 BFS를 구현한 예제 코드입니다. # 큐를 사용한 BFS 구현 예제 from collections import deque def bfs(start, adj_list): visited = [False] * len(adj_list) # 각 노드의 방문 여부를 저장할 리스트 q..

728x90