๋ฌธ์ ํ์ด
DFS๋ฅผ ์ด์ฉํด์ ํ์๋ค.
1. ์ด์ค๋ฐฐ์ด์ ์ฐ๊ฒฐ์ ์ ๋ฃ๋๋ค. (vertex๋ 1๋ถํฐ ์์์ด๊ธฐ ๋๋ฌธ์ 0์ ๋น์๋ ) ex) [[], [3], [3], [1,2,4]]
2. wires๋ฅผ ํฌ๋ฌธ์ ๋๋ฆฌ๋ฉฐ ์ฐ๊ฒฐ์ ์ ์ ๊ฑฐํด๋ณธ๋ค.
3. ํ๋ ์ ๊ฑฐํ ์ํ์์ DFS๋ฅผ ๋๋ ค๋ณธ๋ค.
์ด๋ DFS๋ DFS(๊ทธ๋ํ, ํ์ฌ์ ์ )์ด๊ณ DFS๊ฐ ๊ฐ ์ ์๋ ๋๊น์ง ๊ฐ์ ๋ ๋ฐฉ๋ฌธํ ์ ์ ๊ฐ์ count๋ฅผ ๊ตฌํ๋ค.
(ํ ์ชฝ์ depth๋ง ๊ตฌํด๋ ๋ค๋ฅธ ํ์ชฝ์ ๊ฐ์๋ฅผ ์ ์ ์๊ธฐ๋๋ฌธ์ ๊ทธ๋ฅ 1๋ถํฐ ๋๋ฆฌ๊ณ ๋๊น์ง ๊ฐ๋ณธ๋ค.)
4. wires ํ๋ ์ ๊ฑฐํ ๋๋ง๋ค ์ก์ ํ์ ๊ฐ์ ์ฐจ์ด๋ฅผ ๊ตฌํ๋ค. (๋ค์ wires๋บ๋ visited, count ์ด๊ธฐํ)
์ฝ๋
func solution(_ n:Int, _ wires:[[Int]]) -> Int {
var answer = 100
var networks: [[Int]] = Array(repeating: [], count: n+1)
var visited = Array(repeating: false, count: n+1)
var count = 1 // ๋ฐฉ๋ฌธํ ์ก์ ํ์ ๊ฐ์
// DFS(๊ทธ๋ํ, ํ์ฌ์ก์ ํ ๋ฒํ
์ค)
func DFS(graph: [[Int]], v: Int) {
for i in 0..<graph[v].count {
let vertex = graph[v][i]
if !visited[vertex] {
visited[vertex] = true
count += 1
DFS(graph: graph, v: graph[v][i])
}
}
}
// arr์ ์ฐ๊ฒฐ์ ์ ๋ฃ๋๋ค. (์ธ๋ฑ์ค 0์ ๋ฌด์)
for i in 0..<wires.count {
let a = wires[i][0], b = wires[i][1]
networks[b].append(a)
networks[a].append(b)
}
// ์ฐ๊ฒฐ์ ํ๋์ฉ ๋์ด๋ณด๋ฉฐ DFS ๋๋ฆฐ๋ค.
for i in 0..<wires.count {
// ์ฐ๊ฒฐ์ ์ ์ง์ด๋ค.
var graph = networks
let a = wires[i][0], b = wires[i][1]
let index1 = graph[b].firstIndex(of: a)!
graph[b].remove(at: index1)
let index2 = graph[a].firstIndex(of: b)!
graph[a].remove(at: index2)
// DFS ๋๋ฆฌ๊ธฐ ์ ์ ๋ฐฉ๋ฌธ์ฌ๋ถ, ๋ฐฉ๋ฌธํ ์ก์ ํ๊ฐ์ ์ด๊ธฐํ (1์ ๋ฐฉ๋ฌธํ๋ค๊ณ ๊ฐ์ ํ๊ณ ์์)
visited = Array(repeating: false, count: n+1)
visited[1] = true
count = 1
DFS(graph: graph, v: 1)
// ๋ค๋ฅธ ํ์ชฝ ์ก์ ํ ๊ฐ์๋ฅผ ๊ตฌํด์ ์ฐจ๋ฅผ ๊ตฌํ๋ค.
let anotherTopCount = abs(n-count)
answer = min(answer, abs(count-anotherTopCount))
}
return answer
}
ํ๊ธฐ
์ ๋ง ์ค๋๋ง์ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ๊ณ ์๋ค. ์ค๋ ฅ์ด ๋ค์ ์ฒ์์ผ๋ก ๋์์จ ๊ฒ ๊ฐ๋ค..^^
๊ทธ๋ ๊ฒ ์ด๋ ค์ด ๋ฌธ์ ๋ ์๋ ๊ฒ ๊ฐ์๋ฐ 2์๊ฐ๋์ ํผ๋ฏ..
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค 150369] ํ๋ฐฐ ๋ฐฐ๋ฌ๊ณผ ์๊ฑฐํ๊ธฐ swift (0) | 2023.10.28 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค 150368] ์ด๋ชจํฐ์ฝ ํ ์ธํ์ฌ swift (1) | 2023.10.25 |
[๋ฐฑ์ค 1743] swift ์์๋ฌผ ํผํ๊ธฐ: DFS (0) | 2023.04.05 |
[๋ฐฑ์ค 1654] swift ๋์ ์๋ฅด๊ธฐ (0) | 2023.03.29 |
[ํ๋ก๊ทธ๋๋จธ์ค] 3์ฐจ ์์ถ swift (0) | 2023.03.22 |