Bibi's DevLog π€π
[Swift] DFS μμ μ νμ΄ (Softeer μ₯μ λ¬Ό μΈμ νλ‘κ·Έλ¨) λ³Έλ¬Έ
[Swift] DFS μμ μ νμ΄ (Softeer μ₯μ λ¬Ό μΈμ νλ‘κ·Έλ¨)
λΉλΉ bibi 2023. 1. 16. 22:47[Swift] DFS μμ μ νμ΄ (μ₯μ λ¬Ό μΈμ νλ‘κ·Έλ¨)
μμ μΆμ²: Softeer βμ₯μ λ¬Ό μΈμ νλ‘κ·Έλ¨β (λλ μ΄μ½ν βμλ£μ μΌλ €λ¨ΉκΈ°β - λ μ¬μ)
λλ€ Swiftλ μ§μνμ§ μμ΅λλ€..γ
DFS
- κΉμ΄ μ°μ νμ = μμ λ ΈλλΆν° νμνλ λ°©μ.
- λ©λ¦¬ μλ λ ΈλλΆν° νμνλ μκ³ λ¦¬μ¦. (κ·Έλνμμ κΉμ λΆλΆμ μ°μ μ μΌλ‘ νμνλ μκ³ λ¦¬μ¦)
- λ°©λ¬Έ μ²λ¦¬ : ν λ² μ²λ¦¬ν λ Έλλ₯Ό λ€μ μ²λ¦¬νμ§ μλλ‘ μ²΄ν¬νλ κ².
- μ€ν μλ£κ΅¬μ‘°μ κΈ°μ΄νλ€.
- μ¬κ·λ₯Ό μ΄μ©νλ©΄ κ°κ²°νκ² κ΅¬νν μ μλ€.
O(n)
μ μκ°λ³΅μ‘λλ₯Ό κ°μ§λ€. (n
= λ°μ΄ν°μ κ°μ)
βοΈDFSλ μ€νμ μ΄μ©νλ©° μ€μ ꡬνμμλ μ¬κ·λ‘ ν μ μλ€.
λ¬Έμ
μμ¨μ£Όνν SW μμ§λμ΄μΈ λΉμ μκ² μ₯μ λ¬Όκ³Ό λλ‘λ₯Ό μΈμν μ μλ νλ‘κ·Έλ¨μ λ§λ€λΌλ μ λ¬΄κ° μ£Όμ΄μ‘λ€.
[κ·Έλ¦Ό 1] μ§λ μμ
μ°μ [κ·Έλ¦Ό 1]κ³Ό κ°μ΄ μ μ¬κ°ν λͺ¨μμ μ§λκ° μλ€. 1μ μ₯μ λ¬Όμ΄ μλ κ³³μ, 0μ λλ‘κ° μλ κ³³μ λνλΈλ€.
λΉμ μ μ΄ μ§λλ₯Ό κ°μ§κ³ μ°κ²°λ μ₯μ λ¬Όλ€μ λͺ¨μμΈ λΈλ‘μ μ μνκ³ , λΆλ‘μ λ²νΈλ₯Ό λΆμ΄λ € νλ€. μ¬κΈ°μ μ°κ²°λμλ€λ κ²μ μ΄λ€ μ₯μ λ¬Όμ΄ μ’μ°, νΉμ μλμλ‘ λΆμ΄ μλ κ²½μ°λ₯Ό λ§νλ€. λκ°μ μμ μ₯μ λ¬Όμ΄ μλ κ²½μ°λ μ°κ²°λ κ²μ΄ μλλ€.
[κ·Έλ¦Ό 2] λΈλ‘ λ³ λ²νΈ λΆμ¬
[κ·Έλ¦Ό 2]λ [κ·Έλ¦Ό 1]μ λΈλ‘ λ³λ‘ λ²νΈλ₯Ό λΆμΈ κ²μ΄λ€.
μ§λλ₯Ό μ λ ₯νμ¬ μ₯μ λ¬Ό λΈλ‘μλ₯Ό μΆλ ₯νκ³ , κ° λΈλ‘μ μνλ μ₯μ λ¬Όμ μλ₯Ό μ€λ¦μ°¨μμΌλ‘ μ λ ¬νμ¬ μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ μ½μ‘°κ±΄
Nμ μ μ¬κ°νμμΌλ‘ κ°λ‘μ μΈλ‘μ ν¬κΈ°λ κ°μΌλ©° 5 β€ N β€ 25
μ λ ₯νμ
μ λ ₯ κ°μ 첫 λ²μ§Έ μ€μλ μ§λμ ν¬κΈ° Nμ΄ μ λ ₯λκ³ , κ·Έ λ€μ Nμ€μλ κ°κ° Nκ°μ μλ£(0νΉμ 1)κ° μ λ ₯λλ€.
μΆλ ₯νμ
첫 λ²μ§Έ μ€μλ μ΄ λΈλ‘ μλ₯Ό μΆλ ₯ νμμ€.
κ·Έλ¦¬κ³ κ° λΈλ‘ λ΄ μ₯μ λ¬Όμ μλ₯Ό μ€λ¦μ°¨μμΌλ‘ μ λ ¬νμ¬ ν μ€μ νλμ© μΆλ ₯νμμ€.
μ λ ₯μμ 1
7
1110111
0110101
0110101
0000100
0110000
0111110
0110000
μΆλ ₯μμ 1
3
7
8
9
Swiftλ μ±μ μ΄ μλκΈ° λλ¬Έμ μλμ κ°μ΄ μ λ ₯μ΄ λ€μ΄μ¨λ€κ³ κ°μ νκ³ νμ΄ λ³΄μμ΅λλ€.
q409(n: 7, graph: [
[1,1,1,0,1,1,1],
[0,1,1,0,1,0,1],
[0,1,1,0,1,0,1],
[0,0,0,0,1,0,0],
[0,1,1,0,0,0,0],
[0,1,1,1,1,1,0],
[0,1,1,0,0,0,0]
])
func q409(n: Int, graph: [[Int]]) { // μ₯μ λ¬Ό μΈμ νλ‘κ·Έλ¨
var graph = graph
var bumps: [Int] = []
var bumpLength = 0
func dfs(x: Int, y: Int) -> Bool {
// xμ’νμ yμ’νκ° μ£Όμ΄μ§ λ²μλ₯Ό λμ΄κ°λ©΄ μ¦μ μ’
λ£
if x >= n || y >= n || x < 0 || y < 0 {
return false
}
if graph[x][y] == 1 { // μΈμΌ νλ λμ (μ₯μ λ¬Ό = 1)
graph[x][y] = 0 // λ°©λ¬Έν λμμ 0μΌλ‘ λ°κΏμ€
bumpLength += 1
// ν΄λΉ λ
Έλμ μνμ’μ° λ
Έλμ λν΄μλ λͺ¨λ μ¬κ·νΈμΆ
dfs(x: x - 1, y: y)
dfs(x: x + 1, y: y)
dfs(x: x, y: y - 1)
dfs(x: x, y: y + 1)
return true
}
return false
}
// μ£Όμ΄μ§ λ²μμ λͺ¨λ μ’ν νμΈ μμ
for x in (0..<n) {
for y in (0..<n) {
// νμ¬ μμΉμμ DFS μν
if dfs(x: x, y: y) == true {
bumps.append(bumpLength)
bumpLength = 0
}
}
}
print(bumps.count)
bumps.sorted().forEach{ print($0) }
}
DFSμ ν΅μ¬μ νμ¬ νμνλ μ’νμ μ£Όλ³ (μ¬κΈ°μλ μνμ’μ°) μ’νλ₯Ό μ¬κ·μ μΌλ‘ νμνλ€λ κ²μ΄λ€.
κΉμ΄ μ°μ νμμ μ¬κ·λ‘ ꡬννλ€κ³ μ΄ν΄νλ©΄ λ κ² κ°λ€.
'νλ‘κ·Έλλ° > μκ³ λ¦¬μ¦ νμ΄ Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€ 10811] λ°κ΅¬λ λ€μ§κΈ° (Swift) (0) | 2023.01.19 |
---|---|
[Swift] BFS μμ μ νμ΄ (λ°±μ€ 2178 λ―Έλ‘ νμ) (0) | 2023.01.16 |
[λ°±μ€ 10539] μλΉμ΄μ μμ΄ (Swift) (0) | 2023.01.11 |
[λ°±μ€ 10101] μΌκ°ν μΈμ°κΈ°(Swift) (0) | 2022.12.14 |
[λ°±μ€ 18312] μκ° (Swift) (0) | 2022.12.13 |