플로이드#133
Merged
Merged
Conversation
Contributor
There was a problem hiding this comment.
Code Review
This pull request implements the Floyd-Warshall algorithm for calculating all-pairs shortest paths. The review feedback suggests two primary optimizations: first, populating the distance matrix directly from the input to eliminate the memory overhead of an intermediate adjacency list; and second, aggregating the final output into a single string before printing to improve performance compared to multiple print calls in a loop.
Comment on lines
+5
to
+28
| // 인접리스트 | ||
| var graph: [[(node: Int, weight: Int)]] = Array(repeating: [], count: n+1) | ||
| for _ in 0..<m { | ||
| let line = readLine()!.split(separator: " ").compactMap { Int($0) } | ||
| let (a, b, c) = (line[0], line[1], line[2]) | ||
|
|
||
| graph[a].append((node: b, weight: c)) | ||
| } | ||
|
|
||
| // dist 초기화 | ||
| var dist: [[Int]] = Array(repeating: Array(repeating: INF, count: n+1), count: n+1) | ||
| for i in 1...n { | ||
| dist[i][i] = 0 | ||
| } | ||
|
|
||
| // graph 순회하면서 dist행렬 채우기 | ||
| for i in 1...n { | ||
| for edge in graph[i] { | ||
| let destination = edge.node | ||
| let weight = edge.weight | ||
|
|
||
| dist[i][destination] = min(weight, dist[i][destination]) | ||
| } | ||
| } |
Contributor
There was a problem hiding this comment.
graph 인접 리스트를 생성한 뒤 다시 dist 행렬로 옮기는 과정은 메모리와 시간 측면에서 비효율적입니다. 입력을 읽으면서 직접 dist 행렬의 값을 최소값으로 갱신하도록 수정하면 코드가 더 간결해집니다.
// dist 초기화
var dist: [[Int]] = Array(repeating: Array(repeating: INF, count: n+1), count: n+1)
for i in 1...n {
dist[i][i] = 0
}
// 입력 처리 및 dist 행렬 채우기
for _ in 0..<m {
let line = readLine()!.split(separator: " ").compactMap { Int($0) }
let (a, b, c) = (line[0], line[1], line[2])
dist[a][b] = min(dist[a][b], c)
}
Comment on lines
+40
to
+50
| for i in 1...n { | ||
| var row: [String] = [] | ||
| for j in 1...n { | ||
| if dist[i][j] == INF { | ||
| row.append("0") | ||
| } else { | ||
| row.append(String(dist[i][j])) | ||
| } | ||
| } | ||
| print(row.joined(separator: " ")) | ||
| } |
Contributor
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🔗 문제 링크
✔️ 소요된 시간
50m + 3m
⏰ 시간 복잡도
O(n^3)