본문 바로가기

전체 글

(638)
[그래프 이론 알고리즘] 다양한 그래프 알고리즘 그래프 이론 알고리즘 - DFS/BFS 알고리즘과 최단 경로 알고리즘에서 다룬 내용은 모두 그래프 알고리즘의 한 유형 - 크루스칼 알고리즘은 그리디 알고리즘, 위상 정렬 알고리즘은 큐 자료구조 혹은 스택 자료구조를 활용 - 문제에서 서로 다른 객체가 연결되어 있다는 이야기를 들으면 가장 먼저 그래프 알고리즘을 떠올려야 함 서로소 집합 자료구조 (Union-Find 자료구조) - 서로소 부분 집합들로 나누어진 원소들의 데이터를 처리하기 위한 자료구조 - union과 find 2개의 연산으로 조작 가능 - union 연산은 2개의 원소가 포함된 집합을 하나의 집합으로 합치는 연산 - find 연산은 특정한 원소가 속한 집합이 어떤 집합인지 알려주는 연산 - 트리 자료구조를 이용하여 집합을 표현 서로소 집합 ..
[최단 경로 알고리즘] 전보 - 파이썬(python) 전보 난이도 : 上 풀이 시간 : 60분 시간 제한 : 1초 메모리 제한 : 128 MB 해답 import heapq import sys input = sys.stdin.readline INF = 987654321 n, m, start = map(int, input().split()) graph = [[] for in range(n+1)] distance = [INF] * (n+1) for _ in range(m): x, y, z = map(int, input().split()) graph[x].append((y, z)) def dijkstra(start): q = [] heapq.heappush(q, (0, start)) distance[start] = 0 while q: dist, now = heap..
[최단 경로 알고리즘] 미래 도시 - 파이썬(python) 미래 도시 난이도 : 中 풀이 시간 : 40분 시간 제한 : 1초 메모리 제한 : 128 MB 해답 INF = 987654321 n, m = map(int, input().split()) graph = [[INF] * (n+1) for _ in range(n+1)] for a in range(1, n+1): for b in range(1, n+1): if a == b: graph[a][b] = 0 for _ in range(m): a, b = map(int, input().split()) graph[a][b] = 1 graph[b][a] = 1 x, k = map(int, input().split()) for k in range(1, n+1): for a in range(1, n+1): for b in ..
[최단 경로 알고리즘] 가장 빠른 길 찾기 최단 경로 알고리즘 - 말 그대로 가장 짧은 경로를 찾는 알고리즘 - '한 지점에서 다른 특정 지점까지의 최단 경로', '모든 지점에서 다른 모든 지점까지의 최단 경로' 등의 사례가 존재 - 최단 경로를 모두 출력하는 문제보다는 단순히 최단 거리를 출력하도록 요구하는 문제가 많음 - 그리디 알고리즘과 다이나믹 프로그래밍 알고리즘이 최단 경로 알고리즘에 그대로 적용됨 음의 간선 - 0보다 작은 값을 가지는 간선 - 현실 세계의 길(간선)은 음의 간선으로 표현되지 않으므로 다익스트라 알고리즘은 실제로 GPS 소프트웨어의 기본 알고리즘으로 채택됨 다익스트라 최단 경로 알고리즘 - 그래프에서 여러 개의 노드가 있을 때, 특정한 노드에서 출발하여 다른 노드로 가는 각각의 최단 경로를 구해주는 알고리즘 - '음의 ..
[다이나믹 프로그래밍] 효율적인 화폐 구성 - 파이썬(python) 효율적인 화폐 구성 난이도 : 中 풀이 시간 : 30분 시간 제한 : 1초 메모리 제한 : 128 MB 해답 n, m = map(int, input().split()) array = [] for i in range(n): array.append(int(input())) d = [99999] * (m+1) d[0] = 0 for i in range(n): for j in range(array[i], m+1): d[j] = min(d[j], d[j-array[i]] + 1) if d[m] == 99999: print(-1) else: print(d[m]) 예시 # 정수 N, M을 입력 받기 n, m = map(int, input().split()) # N개의 화폐 단위 정보를 입력 받기 array = [] ..