프로그래머스 - 짝지어 제거하기(Lv. 2)

OQ·2022년 3월 6일
0

프로그래머스

목록 보기
11/33

문제 링크

풀이

import Foundation

func solution(_ s:String) -> Int{
    let sArr: [String] = s.map { String($0) }
    var queue = Queue(sArr)
    var remains: [String] = []
    
    while true { 
        if let popStr = queue.pop() {
            if let last = remains.last, popStr == last {
                remains.removeLast()
            } else {
                remains.append(popStr)
            }
        } else {
            break
        }
    }
    
    return remains.isEmpty ? 1 : 0
}


// pop만되는 큐
struct Queue {
    private var index = 0
    private let strings: [String]
    
    init(_ strings: [String]) {
        self.strings = strings
    }
    
    mutating  func pop() -> String? {
        defer {
            index += 1
        }
        
        if strings.count > index {
            return strings[index]   
        } else {
            return nil
        }
    }
}

후기

처음에는 큐를 사용하지 않고 풀었는데 복잡도에서 실패가 후두두둑...
removeFirst 함수를 쓰지않고 pop만 되는 기본적인 큐를 구현한 후 어렵지 않게 풀었다.

(Swift는 왜 큐가 기본적으로 없는지 참...222)
profile
덕업일치 iOS 개발자

0개의 댓글