감자주먹밥

[프로그래머스] 프린터 (swift) 본문

알고리즘/프로그래머스

[프로그래머스] 프린터 (swift)

JustHm 2021. 12. 18. 22:50
728x90

문제

코딩테스트 연습 - 프린터

문제 해결

  1. 프린터 풀에서 최대 중요도 수를 가져온다.
  2. 프린터 풀 앞에서 부터 최대 중요도 수를 체크한다.
    1. 같다면 풀에 값을 삭제하고 max를 갱신시킨다. 출력 카운트를 늘리고, 요청 문서 위치를 갱신한다.
    2. 다르다면 뒤로 보내는 작업을 한 후, 요청한 문서의 위치를 갱신시킨다.
  3. 마지막으로 요청한 문서가 출력되면 position은 -1이 되어 반복문을 빠져 나오고 값을 출력한다.

코드

func solution(_ priorities:[Int], _ location:Int) -> Int {
    var position = location
    var pool = priorities
    var max = pool.max()
    var count = 0

    while !pool.isEmpty && position >= 0 {
        if max != pool.first {
            pool.append(pool.first!)
            pool.removeFirst()
            if position == 0 {
                position = pool.count-1
            }
            else { position -= 1 }
        }
        else {
            pool.removeFirst()
            max = pool.max()
            count+=1;
            position -= 1
        }
    }
    return count
}

문제 해결 중 어려웠던 것

문제를 풀면서 생각을 너무 안하고 풀었다..

플래그만 몇가지 만들어서 해결한 문제치고 간단하게 풀긴 했지만

공간 복잡도, 시간 복잡도를 생각하고 문제를 푸는 방식을 고려해야겠다.

0.90ms가 최저 속도, 메모리는 평균 16.6MB 정도 사용됐다.

다른방식

func solution(_ priorities:[Int], _ location:Int) -> Int {
    var cPriorities = priorities
    var targetIndex = location
    var seq = 0

    while cPriorities.count > 0 {
        if cPriorities.contains(where: { $0 > cPriorities[0] }) {
            let first = cPriorities.removeFirst()
            cPriorities.append(first)
            targetIndex = targetIndex - 1 < 0 ? cPriorities.count - 1 : targetIndex - 1
        } else {
            if(targetIndex == 0) {
                return priorities.count - cPriorities.count + 1
            } 

            cPriorities.removeFirst()
            targetIndex = targetIndex - 1
        }
    }

    return 0
}
728x90
Comments