문제
프로그래머스 / 기능개발
1) 문제 풀이
func solution(_ progresses:[Int], _ speeds:[Int]) -> [Int] {
var daysNeeded: [Int] = []
var result: [Int] = []
for i in progresses.indices {
let remaining = 100 - progresses[i]
let day = (remaining + speeds[i] - 1) / speeds[i]
daysNeeded.append(day)
}
var current = daysNeeded[0]
var count = 1
for i in 1..<daysNeeded.count {
if daysNeeded[i] <= current {
count += 1
} else {
result.append(count)
current = daysNeeded[i]
count = 1
}
}
result.append(count)
return result
}
결과

2) 코드 개선
✅ 개선 포인트
- 가독성 향상
- 반복 구조 개선
for-in 대신 zip을 사용하여 간결하게 표현
- 유지보수성 개선
func solution(_ progresses: [Int], _ speeds: [Int]) -> [Int] {
let daysNeeded = zip(progresses, speeds).map { (progress, speed) in
(100 - progress + speed - 1) / speed
}
var result: [Int] = []
var deployDay = daysNeeded[0]
var count = 0
for day in daysNeeded {
if day <= deployDay {
count += 1
} else {
result.append(count)
deployDay = day
count = 1
}
}
result.append(count)
return result
}
결과
