알고리즘/GRAPH 5

백준 17837번) 새로운 게임2 - 파이썬

새로운 게임2 문제 재현이는 주변을 살펴보던 중 체스판과 말을 이용해서 새로운 게임을 만들기로 했다. 새로운 게임은 크기가 N×N인 체스판에서 진행되고, 사용하는 말의 개수는 K개이다. 말은 원판모양이고, 하나의 말 위에 다른 말을 올릴 수 있다. 체스판의 각 칸은 흰색, 빨간색, 파란색 중 하나로 색칠되어있다. 게임은 체스판 위에 말 K개를 놓고 시작한다. 말은 1번부터 K번까지 번호가 매겨져 있고, 이동 방향도 미리 정해져 있다. 이동 방향은 위, 아래, 왼쪽, 오른쪽 4가지 중 하나이다. 턴 한 번은 1번 말부터 K번 말까지 순서대로 이동시키는 것이다. 한 말이 이동할 때 위에 올려져 있는 말도 함께 이동한다. 말의 이동 방향에 있는 칸에 따라서 말의 이동이 다르며 아래와 같다. 턴이 진행되던 중에..

알고리즘/GRAPH 2022.10.01

(최단경로알고리즘) 전보, 다익스트라(PYTHON)

출처:: 코딩테스트 교재 최단경로알고리즘 분류:: 다익스트라알고리즘 1. 문제 이해 및 해결과정 입력 3 2 1 1 2 4 1 3 2 출력 2 4 첫 째줄에 도시의개수 N 통로의 개수 M 메시지를 보내고자 하는 도시 C가 있다. 둘째 줄 부터 M+1 번째 줄에 걸쳐서 통로에 대한 정보 X Y Z가 주어진다. 이는 특정 도시 X에서 다른 특정 도시 Y로 이어지는 통로가 있으며 메시지가 전달되는 시간이 Z라는 의미이다. 첫째줄 도시 C에서 보낸 메시지를 받는 도시의 총개수와 총 걸리는 시간을 공백으로 구분하여 출력한다. 2. 풀이방법 import sys from queue import PriorityQueue N, M, C = map(int , input().split()) dic_arr = {} weigh..

알고리즘/GRAPH 2021.12.23

미래 도시(PS)

출처:: M기업 코딩 테스트 분류:: 플루이드 워셜 알고리즘 1. 문제 이해 및 해결과정 - N의 범위가 100이하로 매우 한정적이므로 플로이드 와셜알고리즘 이용 2. 풀이방법 #미래도시 import sys from queue import PriorityQueue INF = int(1e9) #10억 #노드의 개수 및 간선의 개수를 입력받기 n,m=map(int,input().split()) graph = [[INF]*(n) for _ in range(n)] for i in range(m): X, Y = map(int, input().split()) graph[X-1][Y-1] = 1 graph[Y-1][X-1] = 1 #비용은 0으로 초기화 for i in range(n): graph[i][i] = 0 ..

알고리즘/GRAPH 2021.12.20

최단 경로 알고리즘(플로이드워셜 알고리즘)

다익스트라 알고리즘 '한 지점에서 다른 특정 지점까지의 최단경로' 플로이드워셜 알고리즘 '모든 지점에서 다른 모든 지점까지 최단 경로를 모두 구해야 하는 경우' 플로이드 워셜 알고리즘은 단계마다 거쳐가는 노드를 기준으로 알고리즘을 수행한다. 따라서 O(N^3)의 시간복잡도를 가진다. [***모든 노드에서 다른 모든 노드까지]***의 최단 경로를 모두 계산한다. Floyd - Warshall 알고리즘은 다익스트라 알고리즘과 마찬가지로 “단계별로 거쳐가는 노드를 기준”으로 알고리즘을 수행한다. 다만, 매 단계마다, “방문하지 않은 노드 중” “최단 거리를 갖는 노드 찾기” 과정이 필요하지는 않다. 2D 테이블에, [최단 거리 정보]를 저장한다. 왜냐하면 [모든 노드] —> [모든 노드] 까지의 최단 경로를 ..

알고리즘/GRAPH 2021.12.20

최단 경로 알고리즘(다익스트라 알고리즘, 파이썬)

가장 빠른길 찾기 ? 한 지점에서 다른 특정 지점까지의 최단경로를 구해야 하는 경우를 뜻한다. 크게 세가지가 있다. 1) 다익스트라 알고리즘 2) 벨만 포드 알고리즘 3) 플로이드 워셜 알고리즘 가장 중요한 것은 다익스트라 알고리즘과 플로이드 워샬 알고리즘이다. 두가지만 파악을 해도 코딩테스트 수준에서 최단경로 문제는 어렵지 않게 해결 할 수 있다. 1. 다익스트라 알고리즘 GPS 소프트웨어의 가장 기초적 알고리즘으로 채택된다. 다익스트라 알고리즘은 그리디 알고리즘을 사용한다고 생각하면 된다. 매번 가장 비용이 적은 노드를 선택해서 임의의 과정을 반복하기 때문이다. 여기서 또 필요한 알고리즘은 Priority Queue 우선순위 큐이다. 가장 작은 간선의 수를 먼저 실행시켜야 하기 때문이다. ..

알고리즘/GRAPH 2021.12.19