import Foundation
let MNH = readLine()!.split(separator: " ").map { Int($0)! }
let M = MNH[0] // ์ด
let N = MNH[1] // ํ
let H = MNH[2] // ๋ฉด
var board = [[[Int]]]()
for _ in 0..<H {
var tmp = [[Int]]()
for _ in 0..<N {
let line = readLine()!.split(separator: " ").map{ Int($0)! }
tmp.append(line)
}
board.append(tmp)
}
let dx = [-1, 1, 0, 0, 0, 0]
let dy = [0, 0, -1, 1, 0, 0]
let dz = [0, 0, 0, 0, -1, 1]
var queue = [(Int, Int, Int)]()
var dist = Array(repeating: Array(repeating: Array(repeating: -1, count: M), count: N), count: H)
var lastIdx = (0, 0, 0)
var idx = 0
var isCooked = true
for i in 0..<H {
for j in 0..<N {
for k in 0..<M {
if board[i][j][k] == 1 {
queue.append((i, j, k))
}
}
}
}
while idx<queue.count {
let cur = queue[idx]
idx += 1
for dir in 0..<6 {
let nz = cur.0 + dz[dir]
let ny = cur.1 + dy[dir]
let nx = cur.2 + dx[dir]
if nx<0 || ny<0 || nz<0 || nx>=M || ny>=N || nz>=H { continue }
if board[nz][ny][nx] == 0 {
board[nz][ny][nx] = 1
queue.append((nz, ny, nx))
// board[H][N][M] ์์
dist[nz][ny][nx] = dist[cur.0][cur.1][cur.2] + 1
lastIdx = (nz, ny, nx)
}
}
}
for i in 0..<H {
for j in 0..<N {
for k in 0..<M {
if board[i][j][k] == 0 {
isCooked = false
}
}
}
}
if isCooked {
print(dist[lastIdx.0][lastIdx.1][lastIdx.2]+1)
} else {
print(-1)
}
[BFS] ์์์ ์ด ์ฌ๋ฌ๊ฐ์ธ ์ ํ + 3์ฐจ์๋ฐฐ์ด
- board : 3์ฐจ์๋ฐฐ์ด์ ๋ด์ ๊ณต๊ฐ
- dx, dy, dz : ๋ฐฉํฅ์ ์ ํด์ค๋ค. (์ต์ ํ ๋งํ ๋ฅผ ๊ฒฐ์ ํ ๋ฐฉํฅ์ ์ฐพ๊ธฐ ์ํด)
- dist : ํ ๋งํ ๊ฐ ์ต์ ์๊ฐ์ ๋ด์ ๋ฐฐ์ด์ ์ ์ธํด์ค๋ค. (์ต์๊ฑฐ๋ฆฌ์ ๋น์ทํ ๊ฐ๋ )
- lastIdx : ๋ง์ง๋ง ์ขํ๋ฅผ ๋ด์ ํํ
- idx: ํ์ ํฌ์ธํฐ ์ธ๋ฑ์ค
- isCooked : ๋ชจ๋ ํ ๋งํ ๊ฐ ์ต์๋์ง ํ์ธํ๊ธฐ ์ํ Bool
1. 3์ฐจ์ ๋ฐฐ์ด์ ๋๋ฉฐ ์ต์ํ ๋งํ (1)๊ฐ ์๋ ์ขํ๋ฅผ ํ์ ๋ฃ์ด์ค๋ค.
2. ํ์์ idx๋ฅผ ์ด์ฉํด ์ฒซ๋ฒ์งธ ์์๋ฅผ pop ํด์ค๋ค.
3. popํ ์ขํ๋ฅผ 6๊ฐ์ง ๋ฐฉํฅ์ผ๋ก bfs๋ฅผ ๋๋ฆฐ๋ค. (์ด๋ index ์์๋ z,y,x ์์ด๋ค. ์ฒ์์ ๊ทธ๋ ๊ฒ ๋ด์์..)
4. ์๋ก์ด ์ขํ์ ๊ฐ์ด ์์ต์ํ ๋งํ (0)์ผ ๊ฒฝ์ฐ board์ ๊ฐ์ ์ต์ํ ๋งํ (1)๋ก ๋ฐ๊พธ๊ณ , dist์ ์ต์ ์๊ฐ์ ์ ์ฅํด์ค๋ค.
lastIdx์๋ ์๋ก์ด ์ขํ๋ฅผ ์ ์ฅํด๋๋ค.
5. board๋ฅผ ๋๋ฉด์ ์์ต์ํ ๋งํ (0)๊ฐ ์๋ ์ง ํ์ธํ๊ณ isCooked์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํด๋๋ค.
6. lastIdx๋ฅผ ์ด์ฉํด ์ถ๋ ฅํ๋ค.
๋ฐ์ํ
'๐ ์ฝํ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ๋ฐฑ์ค 1926 ๊ทธ๋ฆผ (0) | 2023.06.01 |
---|---|
[Swift] ๋ฐฑ์ค9375 ํจ์ ์ ์ ํด๋น (0) | 2023.04.14 |
[Swift] ๋ฐฑ์ค 9095 1, 2, 3 ๋ํ๊ธฐ (0) | 2023.04.14 |
[Swift] ๋ฐฑ์ค 10026 ์ ๋ก์์ฝ (0) | 2023.04.14 |
[Swift] ๋ฐฑ์ค 11399 ATM (0) | 2023.04.12 |