Algorithm / 기능개발

알고리즘 코드카타

목록 보기
43/59

문제

프로그래머스 / 기능개발

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
}

결과

profile
이유있는 코드를 쓰자!!

0개의 댓글