์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- CollectionView
- rxcocoa
- combine
- TCA
- Swfit
- ํ๋ก๊ทธ๋๋จธ์ค
- ํจ์คํธ์บ ํผ์ค
- ios
- Flutter
- Xcode
- designpattern
- SwiftUI
- raywenderlich
- visionOS
- Lv2
- node.js
- SnapKit
- ๋ฐฑ์ค
- swift
- reactorkit
- MVVM
- XCTest
- tableView
- BOJ
- realm
- UIKit
- Kuring
- arkit
- BFS
- RxSwift
- Today
- Total
lgvv98
[Swift] ํ๋ก๊ทธ๋๋จธ์ค LV2. ์ ๋ ฅ๋ง์ ๋๋ก ๋๋๊ธฐ ๋ณธ๋ฌธ
[Swift] ํ๋ก๊ทธ๋๋จธ์ค LV2. ์ ๋ ฅ๋ง์ ๋๋ก ๋๋๊ธฐ
๐ฅ ์บ๋ฟ๋งจ 2022. 4. 6. 15:10ํ๋ก๊ทธ๋๋จธ์ค LV2. ์ ๋ ฅ๋ง์ ๋๋ก ๋๋๊ธฐ
โ ์ด๊ฑฐ ์ ํฌ์คํ ํ๋๋ฉด ๋๊ฐ์ง ์์๊ฐ ๋ํํ ์์.
1. ๊ตฌ๊ธ๋ง ์์ด BFS / DFS๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐํด๋ด์ด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํจ.
2. minValue๋ฅผ ๊ณ์ฐํ๋ ์์์ด ํ๋ ค์, ์๊ณ ๋ฆฌ์ฆ์ด ๋ง์์๋ ๋ญ๊ฐ ๋ฌธ์ ์ธ์ง ๊ณ ๋ฏผํ ์๊ฐ๋ค์ด ๋ต๋ตํด์
๋ฌธ์ ๊ฐ ๋๋ ๋ถ๋ถ์ minValue๋ฅผ ์ ๋ฐ์ดํธ ํ๋ ๊ณผ์ ์์ n - count - count๋ฅผ ํด์ผํ๋๋ฐ, ์ด๋ป๊ฒ ์๊ฐํ๋์ง, count - n ์ด๋ ๋์ผํ ๊ฐ์ด๋ผ๊ณ ์๊ฐํ์. ๊ทธ๋์ ์์ ์๋ฃ!!
โ ์ฝ๋ ๋ฐ ์๊ณ ๋ฆฌ์ฆ ์ ๊ทผ๋ฒ
์๊ณ ๋ฆฌ์ฆ ์ ๊ทผ๋ฒ์, input์ ๊ฒฝ์ฐ์๋ ๋ ๊ทธ๋ฌ๋ฏ ์ ๋ ๊ฒ ๋ฐ๋๋ค. ์ ๋ ๊ฒ ๋ฐ์์ผ ๊ฐ ์ ์ (๋ ธ๋)๋ค์ด ์ฐ๊ฒฐ๋์ด ์๋๊ฒ ๋น ์ง์ง ์๊ณ ์ค์ ๋๋ค.
๊ทธ ๋ค์์๋ ์ด์ค for๋ฌธ์ ์ฌ์ฉํ๋๋ฐ, ์์ for๋ฌธ์์๋ ์ ์ ์ ์ํํ๋ฉฐํ์ for๋ฌธ์์๋ ๊ทธ ์ ์ ์ด ์ฐ๊ฒฐ๋์ด ์๋ ๊ฐ์ ์ํํ๋ค.
์ฌ๊ธฐ์ ์ค์ํ ๋ก์ง์ด ์ด ๋ฌธ์ ์ ์กฐ๊ฑด์์ ํธ๋ฆฌ๋ฅผ ์ ์ ํ๋ค๋ ๊ฒ์ธ๋ฐ, ๊ทธ ์ ์ ์์ removeFirst()๋ฅผ ์ฌ์ฉํ์ฌ ๋์ด์ฃผ๋ฉด, ๋์ด์ง ๋ฐ๋ํธ์ ์ ๋๋ก ๋ฐฉ๋ฌธํ ์ ์๊ฒ ๋๋ค.(๋จ, ๋ฌธ์ ๊ฐ ๊ทธ๋ํ์ผ์๋ ์์ ๊ฒฝ์ฐ์๋ ์ด ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฝ์ฐ ๋ฐ๋์ชฝ ์ ์ (๋
ธ๋)์์๋ ๋์ด์ฃผ๋ ์์
์ด ํ์ํ๋ค.)
DFS๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ์ ์ ์ ๊ธฐ์ค์ผ๋ก ๋ฐฉ๋ฌธํ๋ค. ๊ทธ๋ผ ๋์ด์ง ๋ถ๋ถ์ ๋ฐฉ๋ฌธํ์ง ๋ชปํด์ DFS์ ๊ฐ์ด ์ ์ ์ ์ด ๊ฐ์๋ณด๋ค ์๊ฒ ๋์ฌํ ๋ฐ, ์ด๋ฅผ ํตํ์ฌ ํด๊ฒฐํ๋ค.
func solution(_ n:Int, _ wires:[[Int]]) -> Int {
var list = [Int :[Int]]()
for i in 0..<wires.count {
let start = wires[i][0]
let end = wires[i][1]
if list[start] == nil {
list[start] = [end]
} else {
list[start]?.append(end)
}
if list[end] == nil {
list[end] = [start]
} else {
list[end]?.append(start)
}
}
// 1. ์ ๋ ฅ๋ง์ ๋๋๋ค.
// 2. DFS / BFS๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฉ๋ฌธํ ์ง์ ์ ์นด์ดํ
ํ๋ค.
// 3. ์ต์๊ฐ์ ๊ณ์ฐํ๋ค.
var minValue = Int.max
for i in 1...n {
for _ in 1...list[i]!.count {
let point = list[i]!.removeFirst() // ์ ๋ ฅ๋ง ๋๊ธฐ
if point != i {
let count = DFS(graph: list, start: i).count
minValue = min(abs(n - count - count), minValue)
}
list[i]!.append(point)
}
}
return minValue
}
func DFS<T> (graph: [T: [T]], start: T) -> [T] {
var visitedQueue: [T] = []
var needVisitStack: [T] = [start]
while !needVisitStack.isEmpty {
let node: T = needVisitStack.removeLast()
if visitedQueue.contains(node) { continue }
visitedQueue.append(node)
needVisitStack += graph[node] ?? []
}
return visitedQueue
}
๋ฌธ์ ๋ฅผ ํ๊ณ ๋์ ๋ค๋ฅธ ๋ถ๋ค์ ์ด๋ป๊ฒ ํ์ผ์ จ๋์ง ์ฐพ์๋ณด์์. ์ด๋ค ๋ถ์ด ์์ฒญ ์ธ๋ จ๋๊ธฐ ํ์ผ์ ์ฝ๋๊ฐ ๊ธฐ์ต๋จ. ๊ทผ๋ฐ ๋๋ ์คํ ๋ค๋์ ์ค๋ฆฌ์ง๋ํ๊ฒ ๋๋ง์ ํ์ด๋ฒ์ ๊ฐ๊ณ ๊ฐ๋๊ฒ ์ข์์, ์ด๋ ๊ฒ ํ.
'์ฝ๋ฉํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ํ๋ก๊ทธ๋๋จธ์ค LV2. ์ฟผ๋ ์์ถ ํ ๊ฐ์ ์ธ๊ธฐ (0) | 2022.04.13 |
---|---|
[Swift] BOJ 1753 ์ต๋จ๊ฒฝ๋ก (0) | 2022.04.13 |
[Swift] BOJ 11724 ์ฐ๊ฒฐ ์์์ ๊ฐ์ (0) | 2022.04.05 |
[Swift] BOJ 1697 ์จ๋ฐ๊ผญ์ง (2์ฐจ์ ๋ฐฐ์ด๋ณด๋ค 1์ฐจ์ ํํ ๋ฐฐ์ด) (0) | 2022.04.05 |
[Swift] BOJ 7576 ํ ๋งํ (0) | 2022.04.03 |