プログラマー-タクシー料金(2021 KAKAKAO BLIND RECRUITMENT)
1784 ワード
プログラマー-タクシー料金(2021 KAKAKAO BLIND RECRUITMENT)
簡単でしたが、提出後に正確性の最後に失敗したので慌てました.どこに問題があるのか見つからず、初期距離の値設定に問題があるようで、100001から10000001に上げるとMAX値が通過しました...料金Fは1以上10万以下の自然水を見ただけで100001という設定で大変でした.N個人の料金がすべて100000であれば、100001は一気に超えるので再設定します.fulieはhipcuを用いたdaostraを用い,まず始点からすべての経路の最短距離を求めた.この後、東からスタート地点まで上がり、降りて、それぞれの家までの距離を解答値に設定します.(始点同乗ではなく、それぞれが行く場合が早いかもしれません)後の始点を除き、すべての地点を起点にaとの最短距離を求め、bとの最短距離後に設定した最高値に比べて最低タクシー代の正解を出すことができます.注意すべきは、始点を除いて、すべての位置で最短距離を求める場合、a点からでもb点からでもよい.この場合、始点の値を0に初期化します.
コードを見ると分かりやすいです.
コード#コード#
import heapq
def dj(start_node,visited,graph,n,a,b):
visited = [100000001 ] * (n+1)
route = []
heapq.heappush(route, (0,start_node))
while route:
cost, node = heapq.heappop(route)
for e_node, e_cost in graph[node]:
next_cost = e_cost + cost
if next_cost < visited[e_node]:
visited[e_node] = next_cost
heapq.heappush(route,(next_cost,e_node))
return visited[a], visited[b] , visited
def solution(n, s, a, b, fares):
# (start_node,visited,graph,n)
graph = []
for _ in range(n+1):
graph.append([])
for c,d,f in fares:
graph[c].append((d,f))
graph[d].append((c,f))
visited = [1000000] * (n+1)
ca,cb, tmp_visited = dj(s,visited,graph,n,a,b)
answer = ca + cb
for i in range(1,n+1):
dist = tmp_visited[i]
if s == i:
continue
c_a, c_b, tmp = dj(i,visited,graph,n,a,b)
#만약 a에서 시작해서 탐색했다면
if i == a:
# 거리를 0으로 초기화
c_a = 0
if i == b:
# 해당 거리를 0으로 초기화
c_b = 0
dist = dist + c_a + c_b
answer = min(answer, dist)
return answer
Reference
この問題について(プログラマー-タクシー料金(2021 KAKAKAO BLIND RECRUITMENT)), 我々は、より多くの情報をここで見つけました https://velog.io/@beomsun/프로그래머스-합승-택시-요금2021-KAKAO-BLIND-RECRUITMENTテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol