TIL/알고리즘 공부
프로그래머스 Lv. 2 Swift 알고리즘 - 기능개발
여의도사노비
2023. 1. 8. 16:17
728x90
문제 옆에 쓰여있듯이 스택/큐와 관련된 문제이다.
스택은 LIFO, 큐는 FIFO의 성질을 지니고 있다.
문제 자체는 어렵지 않았고 앞의 원소가 뒤의 원소보다 작업값이 큰 경우 앞의 원소의 작업이 끝날때까지 기다렸다가 같이 나간다는 개념으로 생각하면 된다.
이 문제를 풀면서 생각한 논리적 흐름
- 작업완료 상태인 100을 채우기 위해 각 원소별로 스피드 대비 몇일의 작업일이 남았는지 확인한다.
- 첫 for문의 경우 criteria가 0이기 때문에 무조건 criteria에 첫 원소의 남은 작업일인 day를 대입해준다.
- 다음 원소부터 기준이 되는 criteria와 day간의 비교를 통해 day가 값이 낮을 경우 앞의 원소를 기다려야하기 때문에
- 1을 추가해 특정 날짜에 완료될 업무의 개수를 누적해준다.
- 다른 원소의 날짜가 criteria의 날짜보다 오래 걸린다면 ans 배열에 다음 원소로 넘어가서 1을 추가해주고 새로운 기준을 잡아준다.
* 코드
import Foundation
func solution(_ progresses:[Int], _ speeds:[Int]) -> [Int] {
var criteria: Int = 0
var ans: [Int] = []
for i in 0...progresses.count-1 {
let day = Int(ceil((100 - Double(progresses[i])) / Double(speeds[i])))
if day > criteria {
criteria = day
ans.append(1)
} else {
ans[ans.count-1] += 1
}
}
return ans
}
정리(Today I Learned)
- 없음