[Swift] 백준 10866 - 덱

문제링크

덱은 double-ended queue로 양쪽 끝에서 삽입 및 삭제가 가능한 자료구조이다.

큐를 구현하듯이 구현하면 되는데 우선 통과된 최종 코드는 다음과 같다.

최종 코드


import Foundation

let N = Int(readLine()!)!
var deque = [Int]()

for _ in 0..<N {
    let commandLine = readLine()!.split(separator: " ")
    let command = String(commandLine[0])


    if command == "push_front" {
        deque.insert(Int(commandLine[1])!, at: 0)
    } else if command == "push_back" {
        deque.append(Int(commandLine[1])!)
    } else if command == "pop_front" {
        print(deque.isEmpty ? -1 : deque.removeFirst())
    } else if command == "pop_back" {
        print(deque.isEmpty ? -1 : deque.removeLast())
    } else if command == "size" {
        print(deque.count)
    } else if command == "empty" {
        print(deque.isEmpty ? 1 : 0)
    } else if command == "front" {
        print(deque.isEmpty ? -1 : deque[0])
    } else if command == "back" {
        print(deque.isEmpty ? -1 : deque.last!)
    }
}
  • removeLast() vs popLast()
    : 둘 다 배열의 마지막 값을 제거하고 반환함
    • removeLast() : Int 반환, 배열이 빈 경우 고려X => 컴파일에러
    • popLast() : Int? 반환, 배열 빈 경우 nil

=> 따라서, 배열이 비어있지 않음을 알고 있을 경우 removeLast를 사용하고, popLast()를 사용하고 싶다면 popLast()! 다음과 같이 강제 언래핑 해주어야한다.

  • deque[0] vs deque.first!
    : 두 가지 모두 배열의 맨 앞자리 값을 가져온다.
    • deque[0]가 더 빠르다. 또한 first는 Int?를 반환하기 때문에 꼭 강제언래핑 처리해주어야한다.

좋은 웹페이지 즐겨찾기