https://www.acmicpc.net/problem/7576
7576번: 토마토
첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토
www.acmicpc.net
import Foundation
var demessions = readLine()!
.split(separator: " ")
.compactMap { Int($0) }
let N = demessions.last!
let M = demessions.first!
print(bfs(N, M))
func bfs(_ N: Int, _ M: Int) -> Int {
let dir: [(x: Int, y: Int)] = [(1, 0), (-1, 0), (0, 1), (0, -1)]
var queue: [(Int, Int)] = []
var warehouse: [[Int]] = Array(repeating: Array(repeating: 0, count: M), count: N)
for i in 0..<N {
let input = readLine()!.split(separator: " ")
for j in 0..<input.count {
let num = Int(input[j])!
if num == 1 { queue.append((i, j)) }
if num == 0 { warehouse[i][j] = -1 }
}
}
var index = 0
while index < queue.count {
let (x, y) = queue[index]
index += 1
for idx in 0..<4 {
let (nx, ny) = (x + dir[idx].x, y + dir[idx].y)
if (0..<N ~= nx) && (0..<M ~= ny) && warehouse[nx][ny] < 0 {
queue.append((nx, ny))
warehouse[nx][ny] = warehouse[x][y] + 1
}
}
}
var answer = 0
for i in 0..<N {
for j in 0..<M {
if warehouse[i][j] == -1 { return -1 }
answer = max(answer, warehouse[i][j])
}
}
return answer
}
'백준 > 골드' 카테고리의 다른 글
[Swift] 5427번 : 불 (0) | 2024.03.18 |
---|---|
[Swift] 7569번 : 토마토 (0) | 2024.03.18 |
[Swift] 10026번 : 적록색약 (0) | 2024.03.18 |
[Swift] 4179번 : 불! (0) | 2024.03.18 |
[Swift] 2493번 : 탑 (0) | 2024.01.12 |