반응형
안녕하세요. 개발 중인 정주입니다.
오늘은 프로그래머스(Lv.2) - 기능개발 문제를 풀었습니다.
목차
Github
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/42586
풀이
해당 문제도 통과는 했지만 다른 분의 답을 보니 너무 1차원적으로 풀이를 했다는 생각이 들었습니다.
저는 progresses에 speeds를 더하면서 first 요소가 100이 되는지 검사하고
반복문을 통해 모든 완료 작업을 pop 하고 개수를 append 했습니다.
이러니 반복문이 중첩돼서 시간 복잡도가 O(n^2)이더라고요.
다른 분의 방법은 각 소요 시간을 계산해서 그것을 기준으로 결과를 append 하는데 훨씬 효율적이더라고요.
참고해서 제 코드도 수정해보았습니다.
생각하는 힘을 길러야겠습니다...
전체 코드
import Foundation
func solution(_ progresses:[Int], _ speeds:[Int]) -> [Int] {
var result: [Int] = []
//1차 통과
// var progresses = progresses
// var speeds = speeds
// while !progresses.isEmpty {
// for i in (0..<progresses.count) {
// progresses[i] += speeds[i]
// }
//
// var count = 0
// while progresses.first ?? -1 >= 100 {
// progresses.removeFirst()
// speeds.removeFirst()
//
// count += 1
// }
//
// if count > 0 {
// result.append(count)
// }
// }
//2차 통과
var lastReleaseDay = 0
for i in (0..<progresses.count) {
let day = Int(ceil((Double(100 - progresses[i])) / Double(speeds[i])))
if day > lastReleaseDay {
lastReleaseDay = day
result.append(1)
} else {
result[result.count-1] += 1
}
}
return result
}
let progresses = [99, 1]
let speeds = [100, 90]
print(solution(progresses, speeds))
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.
반응형