현재 커서를 1에서부터 시작, 주어진 기지국이 커버하는 지점까지의 범위를 사용해 최소 몇 개의 기지국을 새로 설치해야 하는지 더해 나간다. 현재 커서가 위치하는 곳에 기지국의 범위가 존재한다면 기지국을 설치할 필요가 없고, 모든 기지국을 살펴본 뒤 나머지 뒷부분 역시 새로 기지국을 설치해야 한다는 데 주의하자.
import Foundation
func solution(_ n:Int, _ stations:[Int], _ w:Int) -> Int {
var total = 0
let range = 2 * w + 1
var cursor = 1
for station in stations {
if station - w <= cursor {
cursor = station + w + 1
continue
}
let coverage = station - w - cursor
let q = coverage / range
let r = coverage % range
total += r == 0 ? q : (q + 1)
cursor = station + w + 1
}
if cursor <= n {
print(cursor)
let coverage = n - cursor + 1
let q = coverage / range
let r = coverage % range
total += r == 0 ? q : (q + 1)
}
return total
}