백준/골드 [Swift] 7576번 : 토마토 - 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 } 공유하기 URL 복사카카오톡 공유페이스북 공유엑스 공유 게시글 관리 구독하기iOS 개발 공부 저작자표시 Contents 당신이 좋아할만한 콘텐츠 [Swift] 7569번 : 토마토 2024.03.18 [Swift] 10026번 : 적록색약 2024.03.18 [Swift] 4179번 : 불! 2024.03.18 [Swift] 2493번 : 탑 2024.01.12 댓글 0 + 이전 댓글 더보기