๊ฐ์ ์ด์ด๊ฐ๊ธฐ2 ๋ฌธ์
https://www.acmicpc.net/problem/14284

๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํด๊ฒฐํ๋ฉด ๋๋ ๋ฌธ์ ์ด๋ค.
bfs๋ก ์ํํ๋ฉฐ, dp ๋ฐฉ์์ผ๋ก ์ ๊ทผํ๋ฉด ๋๋ค. (๋ง์ ์ฝ๋ค..!)
ํ์ฌ ์ ์ ๊ณผ ๋ค์ ๋ฐฉ๋ฌธํ ์ ์ ๊ณผ ๋น๊ตํ์ ๋,
dp[๋ค์์ ์ ]์ ๊ฐ์ค์น๊ฐ dp[ํ์ฌ์ ์ ]์ ๊ฐ์ค์น+๋ค์ ์ ์ ๊ฐ์ค์น๋ณด๋ค ํฌ๋ฉด dp[๋ค์์ ์ ]ํ์ฌ๊ฐ์ผ๋ก ์ ๋ฐ์ดํธํ๊ณ , ํ์ ์ถ๊ฐํ๋ ๊ฒ์ด ํต์ฌ์ด๋ค.
๋ค์ต์คํธ๋ผ ๋ฌธ์ ๋ฅผ ํ๋๋ ..
๋ค์ต์คํธ๋ผ ๋ฌธ์ ๋ฅผ ํ ๋๋ ์๋ ๋ด์ฉ์ ๊ณ ๋ คํ๋ฉด์ ํ๋ฉด ๋๋ค.
1. dp ๋ฐฐ์ด์ ์ด๊ธฐ๊ฐ์ Int.max๋ก ๋๊ธฐ
2. ๋ฐฉํฅ๊ทธ๋ํ์ธ์ง ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์ธ์ง ํ์ธํด์ ๋์ ๋๋ฆฌ ์ ๋ฐ์ดํธ
3. bfs ์์ํ ๋ ์์๊ฐ์ dp๋ 0์ด๋ ํน์ ๊ฐ์ผ๋ก ์ด๊ธฐํ
4. ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ๋ฐ๋ก ์ํจ
5. ์ค์ํํธ๋ก bfs ํ ๊ฒฝ์ฐ ํ(๋ฐฐ์ด)์ removeFirst()๋ฅผ ํ๊ธฐ๋ณด๋ค๋ ์ธ๋ฑ์ค๋ก ํ์ฌ ํ ๊ฐ์ ๊ฐ์ ธ์์ผ ์๊ฐ์ด๊ณผ๋ฅผ ํผํ ์ ์์
6. ์ด๋๊ฒฝ๋ก๋ ์ถ๋ ฅํด์ผํ ๊ฒฝ์ฐ์๋ ์๋์ฒ๋ผ ์ด๊ธฐํํ๊ณ , ๋ฐฉ๋ฌธ ๋ฆฌ์คํธ๋ฅผ ์ ๋ฐ์ดํธํด์ฃผ๋ฉด ๋๋ค.
- ์์ ๋ฌธ์ >> https://www.acmicpc.net/problem/11779
// DP ์ด๊ธฐํ
var dp: [(cost: Int, visited: [Int])] = Array(repeating: (cost: Int.max, visited: []), count: n+1)
// ๊ฐ์ค์น ์
๋ฐ์ดํธํ ๋ ์๋์ฒ๋ผ ๋ฐฉ๋ฌธํ ๋ฆฌ์คํธ๋ ์
๋ฐ์ดํธ
dp[nq].visited = dp[q].visited + [nq]
์์ค์ฝ๋
let nm = readLine()!.split(separator: " ").map { Int($0)! }
let (n,m) = (nm[0], nm[1])
var dic: [Int: [(end: Int, weight: Int)]] = [:]
for _ in 0..<m {
let tmp = readLine()!.split(separator: " ").map { Int($0)! }
let (st, end, cost) = (tmp[0], tmp[1], tmp[2])
dic[st, default: []].append((end, cost))
dic[end, default: []].append((st, cost))
}
let tmp = readLine()!.split(separator: " ").map { Int($0)! }
let (start, end) = (tmp[0], tmp[1])
var dp: [Int] = Array(repeating: Int.max, count: n+1)
var queue: [Int] = [start]
dp[start] = 0
var idx = 0
while queue.count > idx {
let q = queue[idx]
let nqList = dic[q, default: []]
for (nq, nweight) in nqList {
if dp[nq] >= dp[q] + nweight {
dp[nq] = dp[q] + nweight
queue.append(nq)
}
}
idx += 1
}
print(dp[end])
'๐ Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ๋ฐฑ์ค 14938๋ฒ ์๊ฐ ๊ทธ๋ผ์ด๋ (0) | 2024.10.30 |
---|---|
[Swift] ๋ฐฑ์ค 18352๋ฒ ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ (2) | 2024.04.18 |
๊ฐ์ ์ด์ด๊ฐ๊ธฐ2 ๋ฌธ์
https://www.acmicpc.net/problem/14284

๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํด๊ฒฐํ๋ฉด ๋๋ ๋ฌธ์ ์ด๋ค.
bfs๋ก ์ํํ๋ฉฐ, dp ๋ฐฉ์์ผ๋ก ์ ๊ทผํ๋ฉด ๋๋ค. (๋ง์ ์ฝ๋ค..!)
ํ์ฌ ์ ์ ๊ณผ ๋ค์ ๋ฐฉ๋ฌธํ ์ ์ ๊ณผ ๋น๊ตํ์ ๋,
dp[๋ค์์ ์ ]์ ๊ฐ์ค์น๊ฐ dp[ํ์ฌ์ ์ ]์ ๊ฐ์ค์น+๋ค์ ์ ์ ๊ฐ์ค์น๋ณด๋ค ํฌ๋ฉด dp[๋ค์์ ์ ]ํ์ฌ๊ฐ์ผ๋ก ์ ๋ฐ์ดํธํ๊ณ , ํ์ ์ถ๊ฐํ๋ ๊ฒ์ด ํต์ฌ์ด๋ค.
๋ค์ต์คํธ๋ผ ๋ฌธ์ ๋ฅผ ํ๋๋ ..
๋ค์ต์คํธ๋ผ ๋ฌธ์ ๋ฅผ ํ ๋๋ ์๋ ๋ด์ฉ์ ๊ณ ๋ คํ๋ฉด์ ํ๋ฉด ๋๋ค.
1. dp ๋ฐฐ์ด์ ์ด๊ธฐ๊ฐ์ Int.max๋ก ๋๊ธฐ
2. ๋ฐฉํฅ๊ทธ๋ํ์ธ์ง ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์ธ์ง ํ์ธํด์ ๋์ ๋๋ฆฌ ์ ๋ฐ์ดํธ
3. bfs ์์ํ ๋ ์์๊ฐ์ dp๋ 0์ด๋ ํน์ ๊ฐ์ผ๋ก ์ด๊ธฐํ
4. ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ๋ฐ๋ก ์ํจ
5. ์ค์ํํธ๋ก bfs ํ ๊ฒฝ์ฐ ํ(๋ฐฐ์ด)์ removeFirst()๋ฅผ ํ๊ธฐ๋ณด๋ค๋ ์ธ๋ฑ์ค๋ก ํ์ฌ ํ ๊ฐ์ ๊ฐ์ ธ์์ผ ์๊ฐ์ด๊ณผ๋ฅผ ํผํ ์ ์์
6. ์ด๋๊ฒฝ๋ก๋ ์ถ๋ ฅํด์ผํ ๊ฒฝ์ฐ์๋ ์๋์ฒ๋ผ ์ด๊ธฐํํ๊ณ , ๋ฐฉ๋ฌธ ๋ฆฌ์คํธ๋ฅผ ์ ๋ฐ์ดํธํด์ฃผ๋ฉด ๋๋ค.
- ์์ ๋ฌธ์ >> https://www.acmicpc.net/problem/11779
// DP ์ด๊ธฐํ
var dp: [(cost: Int, visited: [Int])] = Array(repeating: (cost: Int.max, visited: []), count: n+1)
// ๊ฐ์ค์น ์
๋ฐ์ดํธํ ๋ ์๋์ฒ๋ผ ๋ฐฉ๋ฌธํ ๋ฆฌ์คํธ๋ ์
๋ฐ์ดํธ
dp[nq].visited = dp[q].visited + [nq]
์์ค์ฝ๋
let nm = readLine()!.split(separator: " ").map { Int($0)! }
let (n,m) = (nm[0], nm[1])
var dic: [Int: [(end: Int, weight: Int)]] = [:]
for _ in 0..<m {
let tmp = readLine()!.split(separator: " ").map { Int($0)! }
let (st, end, cost) = (tmp[0], tmp[1], tmp[2])
dic[st, default: []].append((end, cost))
dic[end, default: []].append((st, cost))
}
let tmp = readLine()!.split(separator: " ").map { Int($0)! }
let (start, end) = (tmp[0], tmp[1])
var dp: [Int] = Array(repeating: Int.max, count: n+1)
var queue: [Int] = [start]
dp[start] = 0
var idx = 0
while queue.count > idx {
let q = queue[idx]
let nqList = dic[q, default: []]
for (nq, nweight) in nqList {
if dp[nq] >= dp[q] + nweight {
dp[nq] = dp[q] + nweight
queue.append(nq)
}
}
idx += 1
}
print(dp[end])
'๐ Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ๋ฐฑ์ค 14938๋ฒ ์๊ฐ ๊ทธ๋ผ์ด๋ (0) | 2024.10.30 |
---|---|
[Swift] ๋ฐฑ์ค 18352๋ฒ ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ (2) | 2024.04.18 |