본문 바로가기
Algorithm/문제풀이_프로그래머스

[Swift][Programmers][고득점Kit] 기능개발

by Joahnee 2022. 4. 12.

요구능력

 

문제풀이

최악의 경우 시간복잡도가 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
}

댓글