[Swift - ํ๋ก๊ทธ๋๋จธ์ค] ๋ฐฐ๋ฌ
2021. 5. 19. 18:50ใ๐ง๐ป๐ป iOS ๊ฐ๋ฐ/Swift - Algorithm - Solutions
๋ฌธ์ ํด์
1๋ฒ ๋ง์์ ์๋ ์์์ ์์ N๊ฐ์ ๋ง์์ ๋ฐฐ๋ฌ์ ํ๋ ค๊ณ ํฉ๋๋ค. ๊ฐ ๋ง์๋ค ์ฌ์ด์๋ ์๋ฐฉํฅ ๋๋ก๊ฐ ์กด์ฌํ๋๋ฐ ๋๋ก ๋ง๋ค ์ง๋๋ ์๊ฐ์ด ์กด์ฌํฉ๋๋ค. ์ฃผ์ด์ง ๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ๊ฐ ๋ง์๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๊ณ 1๋ฒ ๋ง์ ๋ถํฐ ๊ฐ ๋ง์ ๊น์ง์ ๊ฑฐ๋ฆฌ๊ฐ k ์ดํ์ธ ๋ง์๋ค์ ๊ฐ์๋ค์ ๊ตฌํ๋ ๋ฌธ์ ์ ๋๋ค.
๋จ์ผ ์ถ๋ฐ์ง์์ ๊ฐ์ฅ ์งง์ ๊ฒฝ๋ก๋ฅผ ์ฐพ๊ณ ๊ฐ ๋ง์ ๊น์ง์ ๊ฑฐ๋ฆฌ๋ ์์์ด๋ฏ๋ก ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉํ์ฌ ๊ฐ ๋ง์๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ ํ k๊ฐ ์ดํ์ ๋ง์๋ค์ ๊ฐ์๋ฅผ ๊ตฌํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
๋ฌธ์ ํ์ด & ์ฝ๋
import Foundation
func solution(_ N:Int, _ road:[[Int]], _ k:Int) -> Int {
// 1๋ฒ ๋ง์๋ก ๋ถํฐ ๊ฐ ๋ง์๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐฑ์ ํ ๋ฐฐ์ด, ์ต๋๊ฐ์ผ๋ก ์ด๊ธฐํ ํฉ๋๋ค.
var distsFromFirstVillage = [Int](repeating: Int.max, count: N + 1)
// ๊ทธ๋ํ๋ ์ธ์ ํ๋ ฌ์ ํํ๋ก ๊ตฌํํ๊ณ ํ๋ ฌ ๊ฐ์ ์ด๋ํ๋ ๋ฐ ์์๋๋ ์๊ฐ์ผ๋ก ํํ
// ๊ฐ์ด 0 ์ธ๊ฒฝ์ฐ ๊ฒฝ๋ก๊ฐ ์กด์ฌํ์ง ์์ต๋๋ค.
var graph = [[Int]](repeating: [Int](repeating: 0, count: N + 1), count: N + 1)
for data in road {
let from = data[0]
let to = data[1]
let cost = data[2]
if graph[from][to] == 0 {
graph[from][to] = cost
graph[to][from] = cost
} else {
// ๋ฌธ์ ์์ ํ ๋ง์์์ ๋ค๋ฅธ ๋ง์๊น์ง์ ๊ฒฝ๋ก๊ฐ ์ฌ๋ฌ ๊ฐ ์กด์ฌ
// ๊ทธ๋ฌ๋ ์ต๋จ ๊ฑฐ๋ฆฌ๋ง์ ํ๋จํ๋ฉด ๋๋ฏ๋ก ์์ ์๊ฐ์ด ๊ฐ์ฅ ์งง์ ๊ฐ์ผ๋ก ๊ฐฑ์
if cost < graph[from][to] {
graph[from][to] = cost
graph[to][from] = cost
}
}
}
// ๋ค์ต์คํธ๋ผ ํจ์
func dijkstara(start: Int) {
var queue = [(Int, Int)]()
// ์์์ ๊ฑฐ๋ฆฌ 0์ผ๋ก ์ด๊ธฐํ
distsFromFirstVillage[start] = 0
queue.append((1,distsFromFirstVillage[1]))
while !queue.isEmpty {
let cur = queue.first!.0
let cost = queue.first!.1
queue.removeFirst()
for next in 1...N {
// ๊ฒฝ๋ก๊ฐ ์กด์ฌํ๊ณ ๋ ์งง์ ์ด๋ ์์ ์๊ฐ์ผ ๊ฒฝ์ฐ ๋ฐฐ์ด์ ๊ฐฑ์ ํฉ๋๋ค.
if graph[cur][next] != 0 && cost + graph[cur][next] < distsFromFirstVillage[next] {
distsFromFirstVillage[next] = cost + graph[cur][next]
queue.append((next, distsFromFirstVillage[next]))
}
}
}
}
dijkstara(start: 1)
return distsFromFirstVillage.filter{$0 <= k}.count
}
'๐ง๐ปโ๐ป iOS ๊ฐ๋ฐ > Swift - Algorithm - Solutions' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] [3์ฐจ] n์ง์ ๊ฒ์ (0) | 2021.05.27 |
---|---|
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] [3์ฐจ] ํ์ผ๋ช ์ ๋ ฌ (0) | 2021.05.25 |
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ ์ฐพ๊ธฐ (0) | 2021.05.22 |
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] N๊ฐ์ ์ต์๊ณต๋ฐฐ์ ๊ตฌํ๊ธฐ (0) | 2021.05.20 |
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] ๋ด์ค ํด๋ฌ์คํฐ๋ง (0) | 2021.05.19 |