계수 정렬 특정한 조건이 부합 될 때만 사용할 수 있지만 매우 빠르게 동작한다. 계수 정렬은 데이터의 크기 범위가 제한되어 정수 형태로 표현할 수 있을 때 사용 가능 데이터의 갯수가 N, 데이터중 최댓값이 K일 때 최악의 경우에도 수행시간이 O(N+K)를 보장한다. 동작 예시 1. 가장 작은 데이터부터 가장 큰 데이터까지의 범위가 모두 담길 수 있도록 리스트를 생성한다. 2. 데이터의 값과 동일한 인덱스의 데이터를 1씩 증가시킨다. 3. 리스트의 첫 번째 데이터부터 하나씩 그 값만큼 반복하여 인덱스를 출력한다. 소스 코드 # 모든 원소의 값이 0보다 크거나 같다고 가정 array = [7, 5, 9, 0, 3, 1, 6, 2, 9, 1, 4, 8, 0, 5, 2] # 모든 범위를 포함하는 리스트 선언 (..
Python/알고리즘 - 이론
퀵 정렬 기준 데이터를 설정하고 그 기준보다 큰 데이터와 작은 데이터의 위치를 바꾸는 방법이다. 일반적인 상황에서 가장 많이 사용되는 정렬 알고리즘 중 하나이다. 병렬 정렬과 더불어 대부분의 프로그래밍 언어의 정렬 라이브러리의 근간이 되는 알고리즘이다. 가장 기본적인 정렬은 첫 번째 데이터를 기분 데이터로 설정한다. 동작 예시 1. 첫번째 원소를 피벗으로 설정한다. 2. 왼쪽에서 부터 피벗 값보다 큰 값, 오른쪽에서부터 피벗 값보다 작은 값을 선택한다. 3. 선택된 두개의 값들의 위치를 바꾸어준다. 4. 위 동작들을 반복한다. 5. 위치가 엇갈리는 경우 피벗 값과 작은 값의 위치를 바꾸어준다. 6. 피벗 값을 기준으로 좌우로 나누어 2개의 리스트로 분할하여 준다. 7. 왼쪽 오른쪽 리스트에 대해 1번부터..
정렬 정렬이란 데이터를 특정한 기준에 따라 순서대로 나열한 것이다. 일반적으로 문제 상황에 따라서 적절한 정렬 알고리즘이 공식처럼 사용된다. 선택 정렬 처리되지 않은 데이터 중에서 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸는 것을 반복 처리되지 않은 데이터 중에서 가장 작은 데이터를 선택해 가장 앞의 데이터와 바꾼다. 앞선 1번의 과정을 반복한다. 정렬되지 않은 데이터가 하나가 남은 경우 처리하지 않아도 완성이 된다. array = [7, 3, 5, 4, 2, 6, 1, 0] for i in range(len(array)): min_index = i for j in range(i+1, len(array)): if array[min_index] > array[j]: min_index = j a..

DFS DFS는 깊이 우선 탐색이라고도 불리며 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘이다. DFS는 스택 자료구조를 이용하며, 구체적인 동작은 아래와 같다. 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다 스택의 최상단 노드에 방문하지 않은 인접한 노드가 하나라도 있으면 그 노드를 스택에 넣고 방문 처리를 한다. 방문하지 않은 노드가 없으면 스택에서 최상단 노드를 꺼낸다. 더 이상 2번의 과정을 수행할 수 없을 때까지 반복한다 # DFS 함수 정의 def dfs(graph, v, visited): # 현재 노드를 방문 처리 visited[v] = True print(v, end=' ') # 현재 노드와 연결된 다른 노드를 재귀적으로 방문 for i in graph[v]: if not vi..
재귀 함수 자기 자신을 다시 호출하는 함수 단순한 형태의 재귀 함수 예제 '재귀 함수를 호출합니다'라는 문자열을 무한히 출력합니다. 어느 정도 출력하다가 최대 재귀 깊이 초가 메시지가 출력됩니다. def recursive_function(): print('재귀 함수를 호출합니다.') recursive_function() recursive_function() 재귀함수를 문제 풀이에서 사용할 때는 재귀 함수의 종료 조건을 반드시 명시해야 한다. 종료 조건을 제대로 명시하지 않으면 함수가 무한히 호출될 수 있다. def recursive_function(i): # 100번째 호출을 했을 때 종료되도록 종료 조건 명시 if i == 100: return print(i, '번째 재귀함수에서', i + 1, '번째..