2021. 6. 1. 16:56ใ๐ง๐ป๐ป iOS ๊ฐ๋ฐ/Swift - Algorithm - Solutions
๐ต๐ป ๋ฌธ์ ํด์
๋ฌด์ง์ ์ดํผ์น๋ ์ต๊ทผ ์ฆ์์ง ์ผ๊ทผ ๋๋ฌธ์ ํ์๋ฅผ ํ๊ณ ๊ท๊ฐํ๋ ์ผ์ด ๋์ด๋ฌ์ต๋๋ค. ๊ทธ๋์ ํ์๋ฅผ ๊ฐ์ด ํ๊ณ ๊ท๊ฐํ์ฌ ์๊ธ์ ์ต๋ํ ์ค์ฌ๋ณด๋ ค๊ณ ํฉ๋๋ค. ํจ๊ป ์ถ๋ฐํ๋ ์ง์ s, ๊ทธ๋ฆฌ๊ณ ๊ฐ์์ ์ง์ด ์์นํ๋ a, b ์ง์ ๊ณผ ์ง์ ๊ณผ ์ง์ ์ฌ์ด์ ์์์๊ธ์ด fare ๋ฐฐ์ด๋ก ์ฃผ์ด์ง ๋ ์ต์์๊ธ์ ๊ณ์ฐํด๋ด ์๋ค.
[์ ํ์ฌํญ]
- ์ง์ ๊ฐฏ์ n์ 3 ์ด์ 200 ์ดํ์ธ ์์ฐ์์ ๋๋ค.
- ์ง์ s, a, b๋ 1 ์ด์ n ์ดํ์ธ ์์ฐ์์ด๋ฉฐ, ๊ฐ๊ธฐ ์๋ก ๋ค๋ฅธ ๊ฐ์ ๋๋ค.
- ์ถ๋ฐ์ง์ , A์ ๋์ฐฉ์ง์ , B์ ๋์ฐฉ์ง์ ์ ์๋ก ๊ฒน์น์ง ์์ต๋๋ค.
- ์๊ธ f๋ 1 ์ด์ 100,000 ์ดํ์ธ ์์ฐ์์ ๋๋ค.
- ์ถ๋ฐ์ง์ s์์ ๋์ฐฉ์ง์ a์ b๋ก ๊ฐ๋ ๊ฒฝ๋ก๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ๋ง ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋๋ค.
๐ค ํ์ด ๊ณผ์
๋จผ์ ๋ฌธ์ ๋ฅผ ์ฝ๊ณ ๊ทธ๋ํ ๋ฌธ์ ๋ผ๋ ๊ฒ์ ์ฝ๊ฒ ์ ์ ์์์ต๋๋ค. ์ถ๋ฐ์ง๋ s ํ๋๋ก ๋จ์ผ ์ถ๋ฐ์ง์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ ์ธ ๋๋ก๊ฐ ์๋ฐฉํฅ์ด๋ผ๊ณ ํ๋๊ตฐ์. ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ๊ณผ ํ๋ก์ด๋ ์์ฌ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํด ๋ณผ ์ ์๋๋ฐ, ํด๋น ๋ฌธ์ ์์๋ ์ง์ ์ ์ต๋ ๊ฐ์๊ฐ 200 ์ด๋ฏ๋ก ์๊ฐ ๋ณต์ก๋๊ฐ O(V3)์ธ ํ๋ก์ด๋ ์์ฌ๋ก ์ ๊ทผํด๋ณด์์ต๋๋ค.
๊ทธ๋ผ ๊ฐ์ ์ ์ต๋๊ฐ์ ๊ตฌํด์ฃผ์ด ์ธ์ ๋งคํธ๋ฆญ์ค๋ฅผ ์ด๊ธฐํํด์ฃผ์ด์ผ ํ๋๋ฐ, ์ ๊ฐ์ ๊ฒฝ์ฐ๋ ๋ชจ๋ ์ง์ ๊ณผ ๊ฐ์ ์ด ์ผ์ง์ ์์ ์์นํ ๋, ์ฒซ ๋ฒ์งธ ์ง์ ๊ณผ ๋ ์ง์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๊ฐ ์ต๋๊ฐ ๋๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๋ฐ๋ผ์ ์ง์ ์ ์ต๋ ๊ฐ์๊ฐ 200์ด๊ณ ๊ฐ์ ์ ์ต๋ ๊ธธ์ด๊ฐ 10๋ง์ด๋ฏ๋ก ์ต๋ ๊ธธ์ด(์ต๋ ์๊ธ)๋ 2์ฒ๋ง ๋ฏธ๋ง(200 * 100000)์ด๊ฒ ์ฃ ?
(N + 1) X (N + 1) ํฌ๊ธฐ์ 2์ฐจ์ ํ๋ ฌ์ ์ต๋๊ฐ์ผ๋ก ์ด๊ธฐํ์์ผ์ฃผ๊ณ fare๋ฐฐ์ด์ ํ์ํ๋ฉฐ ๊ฒฝ๋ก๋ง๋ค ๊ทธ ๊ฐ์ ๊ฐฑ์ ํด์ฃผ์์ต๋๋ค. ๊ทธ ํ ํ๋ก์ด๋ ์์ฌ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๊ฐ ์ง์ ๊ฐ ์ต์ ๊ธธ์ด(์๊ธ)๋ฅผ ๊ตฌํด์ฃผ๊ณ 1๋ถํฐ n ์ง์ ์ฌ์ด๋ฅผ ์ค๊ฐ ์ง์ ์ผ๋ก ์ง์ ํ ํ ํ๋ํ๋์ฉ ๊ฐ์ ๋น๊ตํ์ฌ ์ต์ ์๊ธ์ ๊ตฌํด๋ณด์์ต๋๋ค.
๐ฆ ๋ฌธ์ ํ์ด & ์ฝ๋
import Foundation
func solution(_ n:Int, _ s:Int, _ a:Int, _ b:Int, _ fares:[[Int]]) -> Int {
// ์ต๋ ์๊ธ, ์ต๋์๊ธ์ผ๋ก ์ธ์ ๋งคํธ๋ฆญ์ค ์ด๊ธฐํ
let maxFare = 200 * 100000
var graph = [[Int]](repeating: [Int](repeating: maxFare, count: n + 1), count: n + 1)
var answer = Int.max
for fare in fares {
let from = fare[0]
let to = fare[1]
let cost = fare[2]
// ์๋ฐฉํฅ ๊ทธ๋ํ
graph[from][to] = cost
graph[to][from] = cost
}
// ์๊ธฐ ์์ ๊น์ง์ ์๊ธ๋ 0
for node in 1...n {
graph[node][node] = 0
}
// ํ๋ก์ด๋ ์์ฌ: k ์ง์ ์ ๊ฑฐ์ณ๊ฐ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธ์ด ์ธ๋ค๋ฉด, ๊ฐฑ์
for k in 1...n {
for i in 1...n {
for j in 1...n {
graph[i][j] = min(graph[i][j], graph[i][k] + graph[k][j])
}
}
}
// ์ค๊ฐ์ง์ ์ ํ๋์ฉ ์ค์ ํ์ฌ ์ต์๊ฐ์ ๊ตฌํจ. ์ถ๋ฐ์ง์์ ๊ฐ์ ์ถ๋ฐํ๋ ๊ฒฝ์ฐ๋ ํฌํจ (mid == s)
for mid in 1...n {
answer = min(answer, graph[s][mid] + graph[mid][a] + graph[mid][b])
}
return answer
}
'๐ง๐ปโ๐ป iOS ๊ฐ๋ฐ > Swift - Algorithm - Solutions' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] ์๋ฌผ์ ์ ์ด์ (0) | 2021.06.03 |
---|---|
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] ๋ค๋จ๊ณ ์นซ์ ํ๋งค (0) | 2021.06.02 |
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] [์นด์นด์ค ์ธํด] ๊ฒฝ์ฃผ๋ก ๊ฑด์ค (0) | 2021.05.31 |
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] ์ ๊ท ์์ด๋ ์ถ์ฒ (0) | 2021.05.31 |
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] ์์ ๊ฒ์ (0) | 2021.05.29 |