-
dijkstra(최단거리)_LeetCode_1514 [swift]알고리즘/알고리즘 문제풀이 2022. 5. 25. 18:53
https://leetcode.com/problems/path-with-maximum-probability/submissions/
Path with Maximum Probability - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
로직 설명: (다른 문제에서 설명함)
접근방법
- 시작점에서 각node로 갈 최고 확률을 나타내는 dist
- 다음에 탐색 할 정보를 담고있는 queue
- 각 노드가 연결된 정보를 나타내는 adjList
- 위 내용들을 주어진 매개변수로 초기화. dist[시작점] 초기값을 1로 주어, 곱셈에 문제가 없게 함.
- queue의 첫번째 원소를 꺼내어, 최고 확률과 비교한 뒤, dijkstra 실행
정답코드
더보기class Solution { var dist : [Double] = [] var queue : [(Int, Double)] = .init() // { // didSet{ // queue.sort() { // $0.1 < $1.1 // } // } // } var adjList: [[(Int,Double)]] = [] func maxProbability(_ n: Int, _ edges: [[Int]], _ succProb: [Double], _ start: Int, _ end: Int) -> Double { dist = .init(repeating: -1, count: n) dist[start] = 1 adjList = .init(repeating: [], count: n) for(edge, prob) in zip(edges, succProb) { adjList[edge[0]].append((edge[1],prob)) adjList[edge[1]].append((edge[0],prob)) } queue.append((start,1)) while !queue.isEmpty { let first = queue.removeFirst() if dist[first.0] > first.1 { continue } dijkstra(start: first.0) } if dist[end] == -1 { return 0 } return dist[end] } func dijkstra(start: Int) { for info in adjList[start] { if dist[info.0] < 0 || dist[info.0] < dist[start] * info.1 { dist[info.0] = dist[start] * info.1 queue.append((info.0, dist[info.0])) } } } }
성적
더보기Runtime: 836 ms, faster than 85.71% of Swift online submissions for Path with Maximum Probability.Memory Usage: 18.1 MB, less than 100.00% of Swift online submissions for Path with Maximum Probability.'알고리즘 > 알고리즘 문제풀이' 카테고리의 다른 글
문자열?_programmers_ 신고 결과 받기 [swift] (0) 2022.06.24 문자열_codility_binaryGap [swift] (0) 2022.06.19 Dijkstra(최단거리)_programmers_가장 먼 노드 (0) 2022.05.25 Dijkstra(최단거리)_programmers_2021kakao 합승택시요금[swift] (0) 2022.05.18 문자열_프로그래머스_시저 암호 [swift] (0) 2022.05.18