[코딩테스트] 🗺️ 보물섬 - 백준 2589
2025. 9. 23. 19:53ㆍ알고리즘
유형
BFS
소요시간
40분
회고
어제 풀었던 BFS 문제에서 백트래킹이 빠진 유형이어서 할만 했다. index 범위 처리, 거리 계산 등
그러나 숙달되지는 않은 것 같다.
코드
let nm = readLine()!.split(separator: " ").map { Int($0)! }
let (n, m) = (nm[0], nm[1])
var land = [(Int, Int)]()
var board: [[Character]] = Array(repeating: Array(repeating: "W", count: m), count: n)
let landCount = land.count
(0..<n).forEach { i in
readLine()!.enumerated().forEach { j, c in
board[i][j] = c
if c == "L" { land.append((i, j))}
}
}
let dr = [-1, 1, 0, 0]
let dc = [0, 0, 1, -1]
var answer = 0
func bfs(start: (Int, Int)) -> Int {
var dist = Array(repeating: Array(repeating: -1, count: m), count: n)
var queue: [(Int, Int)] = [start]
dist[start.0][start.1] = 0
var head = 0
var local = 0
while head < queue.count {
let start = queue[head]
head += 1
local = max(local, dist[start.0][start.1])
(0..<4).forEach { d in
let nr = start.0 + dr[d]
let nc = start.1 + dc[d]
if nr < 0 || nr >= n || nc < 0 || nc >= m { return }
if board[nr][nc] == "W" { return }
if dist[nr][nc] != -1 { return }
dist[nr][nc] = dist[start.0][start.1] + 1
queue.append((nr, nc))
}
}
return local
}
land.forEach { i in
let dist = bfs(start: i)
answer = max(answer, dist)
}
print(answer)
'알고리즘' 카테고리의 다른 글
| [코딩테스트] 🔥 마법 상어의 파이어볼 - 백준 20056 (0) | 2025.09.30 |
|---|---|
| [코딩테스트] 💨 미세 먼지 제거 - 백준 17144 (1) | 2025.09.26 |
| [코딩테스트] 🦠 연구소3 - 백준 17142 | 삼성 SW 역량 (1) | 2025.09.22 |
| [코딩테스트] - ⚔ Sort 마스터 배지훈 (0) | 2025.09.21 |
| [코딩테스트] ⚙️ 톱니바퀴 돌리기 - 구현문제 삼성 SW 역량 (0) | 2025.09.20 |