728x90
https://programmers.co.kr/learn/courses/30/lessons/12978
플로이드 워셜과 다익스트라 두가지로 풀어봄
그래프 최단경로 문제, 특히 다익스트라랑 플로이드워셜을 처음 써봐서 조금 헤맴
근데 한 세시간정도 코드랑 씨름하다보니까 알고리즘 기전은 확실히 알게된듯
플로이드워셜
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
def solution(N, road, K):
INF = 1000000000
answer = 0
graph = [[INF] * (N + 1) for _ in range(N + 1)]
for i in range(1, N + 1):
for j in range(1, N + 1):
if i == j:
graph[i][j] = 0
for r in road:
a, b, c = r[0], r[1], r[2]
if graph[a][b] > c:
graph[a][b] = c
graph[b][a] = c
for i in range(1, N + 1):
for j in range(1, N + 1):
for k in range(1, N + 1):
graph[j][k] = min(graph[j][k], graph[j][i] + graph[i][k])
for j in range(1, N + 1):
if graph[1][j] <= K:
answer += 1
return answer
|
cs |
다익스트라
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
from queue import PriorityQueue
def solution(N, road, K):
INF = 1000000000
answer = 0
distance = [INF] * (N + 1)
q = PriorityQueue()
q.put([1, 0])
distance[1] = 0
while not q.empty():
now, now_cost = q.get()
if now_cost > distance[now]: continue
for start, dest, cost in road:
next_cost = now_cost + cost
if start == now and next_cost < distance[dest]:
distance[dest] = next_cost
q.put([dest, next_cost])
elif dest == now and next_cost < distance[start]:
distance[start] = next_cost
q.put([start, next_cost])
for i in range(1, N + 1):
if distance[i] <= K:
answer += 1
return answer
|
cs |
728x90
'PS > 프로그래머스' 카테고리의 다른 글
[프로그래머스 LV 2] 영어 끝말잇기 파이썬/python (0) | 2021.06.05 |
---|---|
[프로그래머스 LV 2] 괄호 회전하기 파이썬/python (0) | 2021.06.05 |
[프로그래머스 LV 2] 순위 검색 파이썬/python (0) | 2021.06.04 |
[프로그래머스 LV 2] 튜플 파이썬/python (0) | 2021.06.03 |
[프로그래머스 LV 2] JadenCase 문자열 만들기 (0) | 2021.06.03 |