[코딩테스트] 🧹 로봇청소기 - 백준14503
2025. 10. 20. 20:59ㆍ알고리즘
문제링크
난이도
골드 5
유형
구현
소요시간
1시간
회고
.......
코드
let NM = readLine()!.split(separator: " ").compactMap { Int($0) }
let (N, M) = (NM[0], NM[1])
let rcd = readLine()!.split(separator: " ").compactMap { Int($0) }
var (r, c, d) = (rcd[0], rcd[1], rcd[2])
let board = (0..<N).map { i in
readLine()!.split(separator: " ").compactMap { Int($0) }
}
var visited = Array(repeating: Array(repeating: false, count: M), count: N)
var answer = 0
let dr = [-1, 0, 1, 0]
let dc = [0, 1, 0, -1]
while true {
if !visited[r][c] {
answer += 1
visited[r][c] = true
}
var needClean = false
for _ in 0..<4 {
d = (d + 3) % 4
let nr = r + dr[d]
let nc = c + dc[d]
if candidate(nr, nc), board[nr][nc] == 0, !visited[nr][nc] {
r = nr
c = nc
needClean = true
break
}
}
// 2
if needClean { continue }
let br = r - dr[d]
let bc = c - dc[d]
if !candidate(br, bc) || board[br][bc] == 1 {
break
}
r = br
c = bc
}
print(answer)
func candidate(_ r: Int, _ c: Int) -> Bool {
(0..<N) ~= r && (0..<M) ~= c
}'알고리즘' 카테고리의 다른 글
| [코딩테스트] 🔌 전깃줄 - 백준 2565 (0) | 2025.10.20 |
|---|---|
| [코딩테스트] 🦠 연구소 - 백준14502 (0) | 2025.10.20 |
| [코딩테스트] 🏆 등수매기기 - 백준 2012 (0) | 2025.10.15 |
| [코딩테스트] 🗺️ 여행경로 - 백준 1976 (0) | 2025.10.13 |
| [코딩테스트] 🚶 인구이동 - 백준 16234 (0) | 2025.10.10 |