본문 바로가기

분류 전체보기161

2750-수 정렬하기 (python) def insertion_sort(data): for x in range(len(data)-1): for y in range(x+1, 0, -1): if data[y] < data[y-1]: data[y-1], data[y] = data[y], data[y-1] else: break return data n = int(input()) data = [] for _ in range(n): data.append(int(input())) nums = insertion_sort(data) print('\n'.join([str(n) for n in nums])) 2020. 10. 10.
유니온 파인드(Union-find) 알고리즘 유니온 파인드(Union-find) 알고리즘 Disjoint Set(서로소 집합)을 표현하기 위해 사용한다 (트리 구조를 활용함) 서로 중복되지 않은 부분집합끼리 연결했을 때 사이클이 생기는지 아닌지를 판단할 수 있는 알고리즘 더욱 간단하게, 노드들이 하나의 집합에 속해 있는지 찾거나, 노드들을 서로 연결하기(합치기) 위해 사용 2. 알고리즘의 구현 초기화: n개의 원소를 독립적인 집합으로 구분 초기화 find 함수: 두 개의 노드가 같은 집합(그래프)에 속하는지 확인하기 위해, 루트(최상위 부모) 노드를 찾는 로직 union 함수: 두 집합을 하나의 집합으로 합침(두 트리를 하나의 트리로 연결) 시간 복잡도 최악의 경우(아무 규칙 없이 구현할 경우) O(n) union-by-rank와 path-comp.. 2020. 10. 10.
다익스트라 알고리즘(dijkstra algorithm) * 최단 경로 구하기 알고리즘의 하나 - 다익스트라 알고리즘은, 특정한 노드에서 출발해 마지막 노드에 도착하는 것까지의 경로를 구하는 것과 관련 있다. - 관련 문제: 백준 10282번 - 해킹 (www.acmicpc.net/problem/10282) 백준 5719번 - 거의 최단 경로(www.acmicpc.net/problem/5719) import heapq mygraph = { 'A':{'B':8, 'C':1, 'D':2}, 'B':{}, 'C':{'B':5, 'D':2}, 'D':{'E':3, 'F':5}, 'E':{'F':1}, 'F':{'A':5} } def dijkstra(graph, start): # 초기화 distances = { node:float('inf') for node in gr.. 2020. 10. 10.
최소 힙(min heap)의 구조를 가지고 있는 우선순위 큐 구현 import heapq queue = [] heapq.heappush(queue, [2, 'A']) heapq.heappush(queue, [5, 'B']) heapq.heappush(queue, [1, 'C']) heapq.heappush(queue, [7, 'D']) print(queue) """ [[1, 'C'], [5, 'B'], [2, 'A'], [7, 'D']] """ for x in range(len(queue)): print(heapq.heappop(queue)) """ [1, 'C'] [2, 'A'] [5, 'B'] [7, 'D'] """ - 출처 : FASTCAMPUS 2020. 10. 10.