문제링크
나의 풀이(오답)
def DFS(ca, cb, ssum, a, b, n):
global result
if ca == a and cb == b:
result = min(result, ssum)
return
for k in (1, n):
if not G[ca][k] == 0 and not visited_a[k] == 1:
na = k
visited_a[na] = 1
ssum += G[ca][na]
if not G[cb][k] == 0 and not visited_b[k] == 1:
nb = k
visited_b[nb] = 1
ssum += G[cb][nb]
if na == nb and ca == cb:
ssum -= G[cb][nb]
DFS(na, nb, ssum, a, b, n)
print(result)
def solution(n, s, a, b, fares):
global G, visited_a, visited_b, result
result = 0
G = [[0] * (n + 1) for _ in range(n + 1)]
visited_a = [0] * (n + 1)
visited_b = [0] * (n + 1)
for value in fares:
G[value[0]][value[1]] = value[2]
G[value[1]][value[0]] = value[2]
DFS(s, s, 0, a, b, n)
- 프로그래머스 특성상 기본으로 지역변수를 사용하게 된다.
- global하게 사용되는 변수들을 미리 생각해 전역 처리를 한다.
다른 풀이
import heapq
def solution(n, s, a, b, fares):
d = [ [ 20000001 for _ in range(n) ] for _ in range(n) ]
for x in range(n):
d[x][x] = 0
for x, y, c in fares:
d[x-1][y-1] = c
d[y-1][x-1] = c
for i in range(n):
for j in range(n):
for k in range(n):
if d[j][k] > d[j][i] + d[i][k]:
d[j][k] = d[j][i] + d[i][k]
minv = 40000002
for i in range(n):
minv = min(minv, d[s-1][i]+d[i][a-1]+d[i][b-1])
return minv
- 경로의 값을 최솟값으로 계속 바꾸어주는 로직이 많이 사용된다.