λ¬Έμ μ€λͺ
N×Mν¬κΈ°μ λ°°μ΄λ‘ ννλλ λ―Έλ‘κ° μλ€.
1 | 0 | 1 | 1 | 1 | 1 |
1 | 0 | 1 | 0 | 1 | 0 |
1 | 0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 0 | 1 | 1 |
λ―Έλ‘μμ 1μ μ΄λν μ μλ μΉΈμ λνλ΄κ³ , 0μ μ΄λν μ μλ μΉΈμ λνλΈλ€. μ΄λ¬ν λ―Έλ‘κ° μ£Όμ΄μ‘μ λ, (1, 1)μμ μΆλ°νμ¬ (N, M)μ μμΉλ‘ μ΄λν λ μ§λμΌ νλ μ΅μμ μΉΈ μλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€. ν μΉΈμμ λ€λ₯Έ μΉΈμΌλ‘ μ΄λν λ, μλ‘ μΈμ ν μΉΈμΌλ‘λ§ μ΄λν μ μλ€.
μμ μμμλ 15μΉΈμ μ§λμΌ (N, M)μ μμΉλ‘ μ΄λν μ μλ€. μΉΈμ μ λμλ μμ μμΉμ λμ°© μμΉλ ν¬ν¨νλ€.
μ λ ₯
첫째 μ€μ λ μ μ N, M(2 ≤ N, M ≤ 100)μ΄ μ£Όμ΄μ§λ€. λ€μ Nκ°μ μ€μλ Mκ°μ μ μλ‘ λ―Έλ‘κ° μ£Όμ΄μ§λ€. κ°κ°μ μλ€μ λΆμ΄μ μ λ ₯μΌλ‘ μ£Όμ΄μ§λ€.
μΆλ ₯
첫째 μ€μ μ§λμΌ νλ μ΅μμ μΉΈ μλ₯Ό μΆλ ₯νλ€. νμ λμ°©μμΉλ‘ μ΄λν μ μλ κ²½μ°λ§ μ λ ₯μΌλ‘ μ£Όμ΄μ§λ€.
μ μΆλ ₯ μμ
μ λ ₯
4 6
101111
101010
101011
111011
μΆλ ₯
15
λ΄ λ¬Έμ νμ΄
import Foundation
let size = readLine()!.split(separator: " ").map({Int(String($0))!})
let n = size[0] // μΈλ‘ κΈΈμ΄
let m = size[1] // κ°λ‘ κΈΈμ΄
var maze = [[Int]]() // λ―Έλ‘
var queue = [(0, 0)] // κ²½λ‘μ μ’ν κ°μ λ΄μ ν
let dx = [-1, 1, 0 , 0], dy = [0, 0, -1, 1] // μνμ’μ° κ²μμ μν μ’ν λ³νλ
for _ in 0..<n {
maze.append(readLine()!.map({Int(String($0))!}))
}
// νκ° λΉ λκΉμ§ λ°λ³΅
while !queue.isEmpty {
let (x, y) = queue.removeFirst() // FIFOλ‘ νμ 첫 λ²μ§Έ pop
// μ, ν, μ’, μ° κ²μμ μν΄ 0λΆν° 3κΉμ§ μ΄ 4λ² λ°λ³΅
for i in 0..<4 {
// νμ¬ μμΉμ x, yμΆ κ°κ° dx[i], dy[i] κ°μ λν΄μ κ²μν μ’ν ꡬν΄μ£ΌκΈ°
let nx = x + dx[i]
let ny = y + dy[i]
// nx, nyκ° μ£Όμ΄μ§ λ―Έλ‘μ ν¬κΈ°μ λ²μ΄λκ±°λ, κ²μν μλ¦¬κ° 0μΌ κ²½μ° continue
if nx < 0 || ny < 0 || nx >= n || ny >= m || maze[nx][ny] == 0 { continue }
// κ²μν μλ¦¬κ° 1μΌ κ²½μ°
if maze[nx][ny] == 1 {
maze[nx][ny] = maze[x][y] + 1 // κ²μνλ μ리μ νμ¬ μ리μμ 1 λν κ° λμ
queue.append((nx, ny)) // νμ nx, ny κ° μΆκ°
}
}
}
print(maze[n-1][m-1])
π 1λ‘ μ΄μ΄μ§ λͺ¨λ κ²½λ‘λ₯Ό νμνλ κ²μ΄ ν¬μΈνΈ!
μ΄μ΄μ§ μ리λ€μ 체ν¬ν΄μ£Όμ΄μΌ νλ€λ μ μμ μ΄μ μ νμλ #1926_κ·Έλ¦Όλ¬Έμ μ λΉμ·νλ€.
- 1μ΄ μ±μμ§ λͺ¨λ κ²½λ‘λ‘ ν μΉΈμ© λμκ°λ©΄μ, λͺ©μ μ§κΉμ§μ κΈΈμ΄λ₯Ό ꡬνλ λ¬Έμ μ΄λ€.
λ°λΌμ μ΄λκΉμ§ κ²½λ‘λ₯Ό νμνλμ§ μ λ°μ΄νΈν΄μ€ μ μλ νκ° νμνλ€.
queueλΌλ μ΄λ¦μΌλ‘ λ°°μ΄μ μμ±νκ³ , (0, 0)λΆν° νμν μμ μ΄λ―λ‘ (0, 0)μ λ¨Όμ μ μ₯νλ€.
κ·Έλ¦¬κ³ μνμ’μ° λͺ¨λ κ²½λ‘λ₯Ό κ³ λ €ν΄μ€μΌνλ―λ‘, dx, dy λ°°μ΄λ‘ μ’ν λ³νλμ ννν΄μ£Όμλ€. - whileμ μ¬μ©ν΄μ λμ΄μ νμν κ²½λ‘κ° μμ΄μ§ λκΉμ§ λ°λ³΅νλ€.
μ°μ queueμ κ°μ₯ λ¨Όμ μ μ₯λλ κ°μ κΊΌλ΄μ x, yμ μ μ₯ν΄μ£Όμλ€.
κ·Έλ¦¬κ³ μνμ’μ°λ₯Ό λͺ¨λ κ²μ¬νκΈ° μν΄ forλ¬ΈμΌλ‘ λ± 4λ² λ°λ³΅νκ² νλ€.
nx, ny μμλ₯Ό κ°κ° x, yμ μλ§λ μ’νκ°μ λν΄μ μ μνλ€.
μ΄ λ νΉμ nxλ nyκ° λ―Έλ‘μ ν¬κΈ°λ₯Ό λ²μ΄λκ±°λ 0μ΄ ν λΉλ μλ¦¬μΌ κ²½μ°λ μμΈμ²λ¦¬νλ€.
κ²μν μ리μ 1μ΄ ν λΉλμ΄μμ κ²½μ°, 1μ λμ ν΄μ€λ€. ((0, 0)λΆν° (nx, ny)κΉμ§μ 거리λ₯Ό μλ―Έ!)
κ·Έλ¦¬κ³ queueμ (nx, ny)λ₯Ό appendν΄μ€μΌλ‘μ¨ λ€μμ κ²μ¬ν κ²½λ‘λ₯Ό μΆκ°νλ€.
π‘ νΌλλ°±
- μ νμ μΈ BFSλ¬Έμ κ°μλ°, 1λ‘ μ΄μ΄μ§λ λͺ¨λ κ²½λ‘μ κΈΈμ΄λ₯Ό ꡬν΄μ£Όμ΄μΌνλ€.
'μ΅μ'κΈΈμ΄λ₯Ό ꡬν΄μ€μΌνλ€λ λ§μ μ¬λ‘μ‘νμ μ²μμ 볡μ‘νκ² νμ΄λ₯Ό νλ €λ€ μ€ν¨νλλ°
κ·Έλ₯ BFSλ΅κ² λͺ¨λ κ²½λ‘λ₯Ό νμνλ©΄ λλκ²,,! - κ³μ λ¬Έμ λ₯Ό λ§μ΄ νμ΄λ΄μΌκ² λΉ.
λ¬Έμ
'3οΈβ£ Swift > Problem Solving' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift Algorithm] λΆ! BOJ #4179 (0) | 2021.10.02 |
---|---|
[Swift Algorithm] ν λ§ν BOJ #7576 (0) | 2021.10.02 |
[Swift Algorithm] κ·Έλ¦Ό BOJ #1926 (0) | 2021.09.30 |
[Swift Algorithm] μ£Όμ BOJ #11501 (0) | 2021.09.02 |
[Swift Algorithm] 곡주λμ μ μ BOJ #2457 (0) | 2021.09.01 |
λκΈ