본문 바로가기

프로그래밍 공부/알고리즘 공부46

[이코테] 정렬 알고리즘 풀이 # 국영수 a = [(5, 1, 5), (3, 5, 5), (3, 1, 9), (3, 1, 1)] a.sort() print(a) n = int(input()) students = [] for _ in range(n): students.append(input().split()) students.sort(key = lambda x: (-int(x[1]), int(x[2]), -int(x[3]), x[0])) # 안테나 n = int(input()) data = list(map(int, input().split())) data.sort() print(data[(n-1) // 2]) # 실패율 def solution(N, stages): answer = [] length = len(stages) for i i.. 2022. 10. 27.
정렬 알고리즘 (시간복잡도 비교) 이진탐색 순차탐색 합병정렬, 퀵정렬, 힙정렬 버블정렬, 삽입정렬, 선택정렬 / 쉘정렬 O(logn) O(n) O(nlogn) O(n2) / O(n1.25) 분할과 정복 알고리즘 >> 문제의 입력을 2/n으로 분할하고, 이를 다시 합병하여 문제를 해결하는 방식 이진탐색 O(logn) >> 탐색범위의 중간부터 시작하여, 비교를 통해 절반의 숫자를 제거하는 방식으로, 문제가 2개로 분화되나, 그중 한개는 정렬할 필요가 없으며, 부분문제의 크기가 1/2로 감소하는 알고리즘 합병정렬 O(nlogn) >> 문제의 입력을 2개의 부분문제로 분할, 부분문제의 크기가 1/2로 감소, 분할 정복 후 합병하는 방식 문제가 a로 분할되고, 부분문제의 크기가 1/b로 감소하는 알고리즘 퀵정렬 O(nlogn) >> 기준 데이터를.. 2022. 10. 27.
플로이드 워셜, 다익스트라 알고리즘 플로이드 워셜 알고리즘 # 점화식에 따라 플로이드 워셜 알고리즘을 수행 for k in range(1, n + 1): for a in range(1, n + 1): for b in range(1, n + 1): graph[a][b] = min(graph[a][b], graph[a][k] + graph[k][b]) 모든 노드에서 다른 모든 노드까지의 최단 경로를 모두 계산한다 플로이드 워셜(Floyd-Warshall) 알고리즘은 다익스트라 알고리즘과 마찬가지로 단계별로 거쳐 가는 노드를 기준으로 알고리즘을 수행한다 다만 매 단계마다 방문하지 않은 노드 중에 최단 거리를 갖는 노드를 찾는 과정이 필요하지 않다 플로이드 워셜은 2차원 테이블에 최단 거리 정보를 저장한다 플로이드 워셜 알고리즘은 다이나믹 프로그.. 2022. 10. 8.
알고리즘 정리 Dijkstra Algorithm Dijkstra 알고리즘 BFS를 사용하여 최소거리 경로를 찾을 수 있다. 다익스트라 알고리즘은 최소 Cost를 가지는 경로를 찾을 수 있는 알고리즘이다. 여기서, Cost는 시간일 수도 있고, 시간, 신호등 수, 주변 경관 등을 적절하게 점수화 한 것일 수도 있다. (예를 들어, 시간이 오래 걸리거나 신호등이 많거나 차선이 좁으면 상승하는 Cost 함수를 만들 수 있다면 이 Cost 함수를 최소화 하는 경로를 찾을 수 있다는 의미이다.) 이를 이용하면 네비게이션 알고리즘에서 최단경로, 최소시간, 최소비용, 최적 경로라는 이름으로 경로를 탐색하고 사용자는 이 중 적절한 경로를 선택하도록 하는 것이 가능하다. 다익스트라 알고리즘은 현재노드를 통해 연결된 노드로 가는 것과 다른 경로를 통해 가는 Cost를 .. 2021. 5. 28.