λ¬Έμ μ€λͺ
μ² μμ ν λ§ν λμ₯μμλ ν λ§ν λ₯Ό 보κ΄νλ ν° μ°½κ³ λ₯Ό κ°μ§κ³ μλ€. ν λ§ν λ μλμ κ·Έλ¦Όκ³Ό κ°μ΄ 격μλͺ¨μ μμμ μΉΈμ νλμ© λ£μ λ€μ, μμλ€μ μμ§μΌλ‘ μμ μ¬λ €μ μ°½κ³ μ 보κ΄νλ€.
μ°½κ³ μ 보κ΄λλ ν λ§ν λ€ μ€μλ μ μ΅μ κ²λ μμ§λ§, μμ§ μ΅μ§ μμ ν λ§ν λ€λ μμ μ μλ€. λ³΄κ΄ ν νλ£¨κ° μ§λλ©΄, μ΅μ ν λ§ν λ€μ μΈμ ν κ³³μ μλ μ΅μ§ μμ ν λ§ν λ€μ μ΅μ ν λ§ν μ μν₯μ λ°μ μ΅κ² λλ€. νλμ ν λ§ν μ μΈμ ν κ³³μ μ, μλ, μΌμͺ½, μ€λ₯Έμͺ½, μ, λ€ μ¬μ― λ°©ν₯μ μλ ν λ§ν λ₯Ό μλ―Ένλ€. λκ°μ λ°©ν₯μ μλ ν λ§ν λ€μκ²λ μν₯μ μ£Όμ§ λͺ»νλ©°, ν λ§ν κ° νΌμ μ μ λ‘ μ΅λ κ²½μ°λ μλ€κ³ κ°μ νλ€. μ² μλ μ°½κ³ μ 보κ΄λ ν λ§ν λ€μ΄ λ©°μΉ μ΄ μ§λλ©΄ λ€ μ΅κ² λλμ§ κ·Έ μ΅μ μΌμλ₯Ό μκ³ μΆμ΄ νλ€.
ν λ§ν λ₯Ό μ°½κ³ μ 보κ΄νλ 격μλͺ¨μμ μμλ€μ ν¬κΈ°μ μ΅μ ν λ§ν λ€κ³Ό μ΅μ§ μμ ν λ§ν λ€μ μ λ³΄κ° μ£Όμ΄μ‘μ λ, λ©°μΉ μ΄ μ§λλ©΄ ν λ§ν λ€μ΄ λͺ¨λ μ΅λμ§, κ·Έ μ΅μ μΌμλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νλΌ. λ¨, μμμ μΌλΆ μΉΈμλ ν λ§ν κ° λ€μ΄μμ§ μμ μλ μλ€.
μ λ ₯
첫 μ€μλ μμμ ν¬κΈ°λ₯Ό λνλ΄λ λ μ μ M,Nκ³Ό μμμ¬λ €μ§λ μμμ μλ₯Ό λνλ΄λ Hκ° μ£Όμ΄μ§λ€. Mμ μμμ κ°λ‘ μΉΈμ μ, Nμ μμμ μΈλ‘ μΉΈμ μλ₯Ό λνλΈλ€. λ¨, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, 1 ≤ H ≤ 100 μ΄λ€. λμ§Έ μ€λΆν°λ κ°μ₯ λ°μ μμλΆν° κ°μ₯ μμ μμκΉμ§μ μ μ₯λ ν λ§ν λ€μ μ λ³΄κ° μ£Όμ΄μ§λ€. μ¦, λμ§Έ μ€λΆν° Nκ°μ μ€μλ νλμ μμμ λ΄κΈ΄ ν λ§ν μ μ λ³΄κ° μ£Όμ΄μ§λ€. κ° μ€μλ μμ κ°λ‘μ€μ λ€μ΄μλ ν λ§ν λ€μ μνκ° Mκ°μ μ μλ‘ μ£Όμ΄μ§λ€. μ μ 1μ μ΅μ ν λ§ν , μ μ 0 μ μ΅μ§ μμ ν λ§ν , μ μ -1μ ν λ§ν κ° λ€μ΄μμ§ μμ μΉΈμ λνλΈλ€. μ΄λ¬ν Nκ°μ μ€μ΄ Hλ² λ°λ³΅νμ¬ μ£Όμ΄μ§λ€.
ν λ§ν κ° νλ μ΄μ μλ κ²½μ°λ§ μ λ ₯μΌλ‘ μ£Όμ΄μ§λ€.
μΆλ ₯
μ¬λ¬λΆμ ν λ§ν κ° λͺ¨λ μ΅μ λκΉμ§ μ΅μ λ©°μΉ μ΄ κ±Έλ¦¬λμ§λ₯Ό κ³μ°ν΄μ μΆλ ₯ν΄μΌ νλ€. λ§μ½, μ μ₯λ λλΆν° λͺ¨λ ν λ§ν κ° μ΅μ΄μλ μνμ΄λ©΄ 0μ μΆλ ₯ν΄μΌ νκ³ , ν λ§ν κ° λͺ¨λ μ΅μ§λ λͺ»νλ μν©μ΄λ©΄ -1μ μΆλ ₯ν΄μΌ νλ€.
μ μΆλ ₯ μμ
μ λ ₯
5 3 1
0 -1 0 0 0
-1 -1 0 1 1
0 0 0 1 1
μΆλ ₯
-1
λ΄ λ¬Έμ νμ΄
let info = readLine()!.split(separator: " ").map({Int(String($0))!})
let m = info[0] // μμ κ°λ‘ μΉΈμ μ
let n = info[1] // μμ μΈλ‘ μΉΈμ μ
let h = info[2] // μμμ¬λ¦¬λ μμμ μ
var box = Array(repeating: [[Int]](), count: h)
var queue = [(Int, Int, Int)]()
let dz = [-1, 1, 0, 0, 0, 0], dx = [0, 0, -1, 1, 0 , 0], dy = [0, 0, 0, 0, -1, 1] // μμλ, μνμ’μ° κ²μμ μν μ’ν λ³νλ
var empty = 0
var count = 0
for i in 0..<h {
for _ in 0..<n {
box[i].append(readLine()!.split(separator: " ").map({Int(String($0))!}))
}
}
func bfs() {
var index = 0
while index < queue.count {
let (z, x, y) = queue[index]
index += 1
for j in 0..<6 {
let nz = z + dz[j]
let nx = x + dx[j]
let ny = y + dy[j]
if nz < 0 || nx < 0 || ny < 0 || nz >= h || nx >= n || ny >= m { continue } // μμΈ
// νμν μλ¦¬κ° 0μΌ κ²½μ°! (μ΄μ μ΅νμ§ κ²μ)
if box[nz][nx][ny] == 0 {
queue.append((nz, nx, ny)) // 1λ‘ μ΅νμ‘μΌλ―λ‘, μλ‘μ΄ νμ μμμ μ΄ μΆκ°λμ΄μΌ ν¨
box[nz][nx][ny] = box[z][x][y] + 1 // μ΄ μ리κΉμ§ μ΅νμ§λλ°μ κ±Έλ¦° μκ°μ λμ
count += 1 // μ΅ν μΉ΄μ΄νΈ λμ
}
}
}
}
for z in 0..<h {
for x in 0..<n {
for y in 0..<m {
if box[z][x][y] == 1 { queue.append((z, x, y)) } // μ΅μ ν λ§ν μμΉλ₯Ό νμ μμμ μΌλ‘ μΆκ°
else if box[z][x][y] == 0 { empty += 1 } // μμ΅μ ν λ§ν μ κ°μ μΈκΈ°
}
}
}
bfs()
empty == 0 ? print(0) : (empty == count ? print(box.flatMap({$0}).flatMap({$0}).max()!-1) : print(-1))
π bfsνμ μ 미리 μ΅μ ν λ§ν μ μμΉμ μμ΅μ ν λ§ν μ κ°μλ₯Ό μΈκ³ μμν΄μ£Όλ κ²μ΄ ν¬μΈνΈ!
μ§λλ² νμ΄νλ #7576λ² λ¬Έμ μ κ±°μ λμΌνλ―λ‘ κ°λ¨ν μ€λͺ νκ² λ€.
- #7576λ² λ¬Έμ λ ν λ§ν λμ₯μ΄ 2μ°¨μμ΄μμ§λ§ μ΄ λ¬Έμ λ 3μ°¨μμ΄λΌλ μ μ΄ λ€λ₯΄λ€.
μ΄λ¬ν μ΄μ λ‘ νμμ ν λ, μνμ’μ° 4λ°©ν₯λΏλ§μλλΌ μ, μλκΉμ§ ν¨κ» λ΄μ€μΌνλ€.
λ°λΌμ dz, dx, dyλ‘ μ’ν λ³νλμ μ μνκ³ bfs ν¨μμ forλ¬Έμ μ΄ 6λ² λ°λ³΅νκ² νλ€. - bfs ν¨μ μ€ν μ μλ 3μ€ forλ¬Έμ μ΄μ©ν΄ μ΅μ ν λ§ν μ μμ΅μ ν λ§ν λ₯Ό μ°Ύμ쀬λλ°,
μ΅μ ν λ§ν λ κ·Έ μμΉλ₯Ό νμ λ΄μμ bfs νμμ μμμ μΌλ‘ μΌμ μ μκ² νλ€.
κ·Έλ¦¬κ³ μμ΅μ ν λ§ν λ κ°μλ₯Ό μΈμ΄μ, λ§μ§λ§μ μ΅ν ν λ§ν μ κ°μμ λΉκ΅ν μ μκ² ν΄μ€¬λ€.
(7576λ² λ¬Έμ μ κ±°μ λμΌνλ―λ‘,, μμΈν μ€λͺ μ μ΄μ κ²μκΈμ μ°Έκ³ ν΄μ£ΌμΈμ,,!π₯)
π‘ νΌλλ°±
- swiftλ₯Ό μ¬μ©νλ©΄μ 3μ°¨μ λ°°μ΄μ μ¬μ©ν μΌμ΄ κ±°μ μμκΈ° λλ¬Έμ
appendνκ±°λ, flatMapμ μ¬μ©νλ κ³Όμ μμ μ½κ° ν·κ°λ Έμ§λ§ κΈλ°© ν΄κ²°νλ€. - μ΄μ μ νμλ λ¬Έμ μ κ±°μ κ°μμ κΈλ°© ν μ μμλ€.
λ¬Έμ
'3οΈβ£ Swift > Problem Solving' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift Algorithm] λ¨μ§λ²νΈλΆμ΄κΈ° BOJ #2667 (0) | 2021.10.10 |
---|---|
[Swift Algorithm] μμ ꡬνκΈ° BOJ #2583 (0) | 2021.10.10 |
[Swift Algorithm] μ κΈ°λ λ°°μΆ BOJ #1012 (0) | 2021.10.05 |
[Swift Algorithm] μ¨λ°κΌμ§ BOJ #1697 (2) | 2021.10.05 |
[Swift Algorithm] λΆ! BOJ #4179 (0) | 2021.10.02 |
λκΈ