배달
🤖문제 : 배달 Lv2
😎풀이
def solution(N, road, K):
answer = 0
INF = int(1e9)
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 start, end, length in road :
graph[start][end] = min(graph[start][end], length)
graph[end][start] = min(graph[end][start], length)
for k in range(1, N+1) :
for a in range(1, N+1) :
for b in range(1, N+1) :
if k == 2 and a == 1 and b == 5 :
print(graph[a][b], graph[a][k], graph[k][b])
graph[a][b] = min(graph[a][b], graph[a][k] + graph[k][b])
for v in graph[1] :
if v <= K :
answer +=1
return answer
👩🏫접근 방식
- 플로이드 워셜
- 다익스트라 알고리즘으로 접근했어야 했는데, 문제를 잘 못 읽고 플로이드 워셜 알고리즘을 사용했다..
- 모든 구간에서 모든 구간으로 조건을 탐색하는 문제로 착각했었다.
- 시간 복잡도가 O(N3)인 알고리즘이지만 문제 조건상 가능했다.
섬 연결하기
🤖문제 : 섬 연결하기 Lv3
😎풀이
def find_parent(parent, x) :
if parent[x] != x :
parent[x] = find_parent(parent, parent[x])
return parent[x]
def union_parent(parent, a, b) :
a = find_parent(parent, a)
b = find_parent(parent, b)
if a < b :
parent[b] = a
else :
parent[a] = b
def solution(n, costs) :
edges = []
answer = 0
parent = [0]*(n)
for i in range(n) :
parent[i] = i
for cost in costs :
edges.append(cost)
edges.sort(key =lambda x : x[2])
for edge in edges :
a, b, cost = edge
if find_parent(parent, a) != find_parent(parent, b) :
union_parent(parent, a, b)
answer += cost
return answer
👩🏫접근 방식
- 크루스칼 알고리즘
- 최소 비용으로 신장 트리를 찾는 알고리즘인 크루스칼 알고리즘 사용.