Algorithm/문제풀이_프로그래머스
[Swift][Programmers][고득점Kit] 기능개발
Joahnee
2022. 4. 12. 09:59
요구능력
큐
문제풀이
최악의 경우 시간복잡도가 O(n^2)이지만, 배열길이들이 100개이하라고 해서 아무리 최악의 경우라도 10000번이라 그냥 브루트포스로 풀었다.
Swift의 경우 배열에 넣어놓고 removeFirst()를 사용하면 큐처럼 FIFO방식으로 구현이 가능하다.
이 문제는 시간복잡도를 크게 고려하지 않아도 풀 수 있도록 만들어놔서 상관없지만, 나중가면 removeFirst()의 O(n)의 시간복잡도가 아주 골치아파지니 자주 사용은 안하는걸 권해드린다.
나는 queue가 비어있지 않으면 계속 반복하면서 queue에 speed만큼을 더해주었고 그 queue를 맨처음부터 돌리면서 100이넘으면 계속 탐색(count에 1을 더하고 queue와 speed에서 FIFO방식으로 맨앞을 빼주었다.)하고 100이넘지 않으면 그 뒤에는 가지도 않도록 break를 잡아주었다.
그리고 count가 1을 넘어갈경우에만 result에 추가해줬다.
후기
그냥간단한 브루트포스 큐 문제같다.
코드
func solution(_ progresses:[Int], _ speeds:[Int]) -> [Int] {
var result = [Int]()
var queue = progresses
var speed = speeds
while !queue.isEmpty{
var count = 0
for i in 0..<queue.count{
queue[i] += speed[i]
}
for i in queue{
if i >= 100 {
count += 1
queue.removeFirst()
speed.removeFirst()
}else{
break
}
}
if count >= 1{
result.append(count)
}
}
return result
}