import Foundation
/// ์ผ๋น ๋ฒ ์ด์ปจ ์ : ๋ชจ๋ ์ฌ๋๊ณผ ์ผ๋น ๋ฒ ์ด์ปจ ๊ฒ์์ ํ์ ๋ ๋์ค๋ ๋จ๊ณ์ ํฉ
/// BOJ ์ ์ ๊ฐ 5๋ช
์ด๊ณ , 1-3, 1-4, 2-3, 3-4, 4-5๊ฐ ์น๊ตฌ์ธ ๊ฒฝ์ฐ
/// 1์ ์น๊ตฌ์ ์ด์ด์ง๊ธฐ ์ํด 1-3-2, 1-3, 1-4, 1-4-5 ์ด๋ฐ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ค. ์ฆ ์ผ๋น ๋ฒ ์ด์ปจ ์๋ 2 + 1 + 1 + 2 = 6์ด๋ค.
/// BOJ ์ ์ ์ ์์ ์น๊ตฌ๊ด๊ณ๊ฐ ์
๋ ฅ์ผ๋ก ์ฃผ์ด์ก์ ๋, ์ผ๋น ๋ฒ ์ด์ปจ ์๊ฐ ๊ฐ์ฅ ์์ ์ฌ๋์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
/// N : ์ ์ ์ ์
/// M : ์น๊ตฌ๊ด๊ณ์ ์
let NM = readLine()!.components(separatedBy: " ").map { Int($0)! }
let N = NM[0]
let M = NM[1]
var graph = [String: [String]]()
for i in 1...N {
graph[String(i)] = []
}
for _ in 1...M {
let AB = readLine()!.components(separatedBy: " ").map { Int($0)! }
let A = String(AB[0])
let B = String(AB[1])
graph[A]?.append(B)
graph[B]?.append(A)
}
var kbNumArr = [Int]()
for i in 1...N {
kbNumArr.append(BFS(n: String(i)))
}
print(kbNumArr.firstIndex(of: kbNumArr.min()!)! + 1)
// n๋ฒ ์ ์ ์ ์ผ๋น ๋ฒ ์ด์ปจ ์๋ฅผ ๋ฐํ
func BFS(n: String) -> Int {
var visitedQueue: [String] = []
var needVisitQueue: [String] = [n]
var tempFloor: Set<String> = [n] // ํ์ฌ ์ธต์ ๋
ธ๋๋ฅผ ๋ด๋ ๋ฐฐ์ด
var currentFloor = 0 // ํ์ฌ ์ธต
var cnt = 0
while !needVisitQueue.isEmpty {
let node: String = needVisitQueue.removeFirst()
if visitedQueue.contains(node) { continue }
// ๋ฐฉ๋ฌธํ์ง ์์ ๋
ธ๋๋ฉด ์๋ ํจ์ ์คํ
/// ํ์ฌ์ธต ๋
ธ๋๋ฅผ ๋ด๋ ๋ฐฐ์ด์ ๋
ธ๋๊ฐ ์๋ ๊ฒฝ์ฐ
/// ์ธ์ ํ ๋ฐฐ์ด ์ค์์
/// ๋ฐฉ๋ฌธํ์ง ์์ ๋
ธ๋๋ง ๊ฐ์ ธ์์ ๋ด๊ณ ์ธต์๋ฅผ ์ฌ๋ ค๋ผ
if !tempFloor.contains(node) {
for currentFloorNode in tempFloor {
for adjacentNode in graph[currentFloorNode] ?? [] {
if !visitedQueue.contains(adjacentNode) {
tempFloor.insert(adjacentNode)
tempFloor.remove(currentFloorNode)
}
}
}
currentFloor += 1
}
visitedQueue.append(node)
needVisitQueue += graph[node] ?? []
cnt += currentFloor
}
return cnt
}
ํ์๋ ์์ด๋์ด
1. bfs์ ๊ด๋ จ๋ ๋ก์ง์ https://jerry311.tistory.com/38 ์ด์ชฝ์์ ๋ค๋ค๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ค.
2. ์ธ์ ํ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ ๋๋ง๋ค tempFloor ๋ฐฐ์ด์ ํ์ฌ ์ธต์ ๋ ธ๋๋ฅผ ๋ฐฐ์ด๋ก ์ ์ฅํจ
0์ธต - 1
1์ธต - 3, 4
2์ธต - 2, 5
3. ์ด๋ฐ์์ผ๋ก ๊ฐ์ธต๋ง๋ค ๋ ธ๋๋ฅผ ๋ฃ์ด๋๊ณ ๋ค๋ฅธ ๊ฐ์ด ๋ค์ด์ฌ๋๋ง๋ค currentFloor๋ฅผ ํ๋์ฉ ๋ํด์คฌ๋ค.
4. ์ธต์๊ฐ ๊ฒฐ๊ตญ ๊ฑฐ๋ฆฌ์ ์๋๊น ๊ทธ๊ฑธ ๋ํด์ ์ผ๋น ๋ฒ ์ด์ปจ ์๋ฅผ ๊ตฌํ๋ค.
๋ฐ์ํ
'๐ ์ฝํ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ๋ฐฑ์ค1012 ์ ๊ธฐ๋๋ฐฐ์ถ (0) | 2023.03.30 |
---|---|
[Swift] ๋ฐฑ์ค1260 DFS์ BFS (0) | 2023.03.30 |
[Swift] ๋ฐฑ์ค 11650 ์ขํ ์ ๋ ฌํ๊ธฐ (0) | 2023.03.29 |
[Swift] ๋ฐฑ์ค 10866 ๋ฑ (0) | 2023.03.29 |
[Swift] ๋ฐฑ์ค10845 ํ (0) | 2023.03.28 |