import Foundation
/// 기본 VPS : ()
/// 만일 x가 VPS라면 (x)도 VPS
/// x: VPS, y: VPS라면 xy도 VPS
let N = Int(readLine()!)!
var queue = Queue<Int>()
for _ in 1...N {
let li = readLine()!
if li.hasPrefix("push") {
let strComp = li.components(separatedBy: " ")
let num = Int(strComp[1])!
queue.enqueue(num)
} else if li.hasPrefix("pop") {
if let num = queue.dequeue() {
print(num)
} else {
print("-1")
}
} else if li.hasPrefix("size") {
print(queue.count)
} else if li.hasPrefix("empty") {
if queue.isEmpty {
print(1)
} else {
print(0)
}
} else if li.hasPrefix("front") {
print(queue.front ?? -1)
} else if li.hasPrefix("back") {
print(queue.back ?? -1)
}
}
struct Queue<T> {
private var queue: [T?] = []
private var head: Int = 0
public var count: Int {
return queue.count - head
}
public var isEmpty: Bool {
return count == 0
}
public mutating func enqueue(_ element: T) {
queue.append(element)
}
public mutating func dequeue() -> T? {
if isEmpty {
return nil
}
let element = queue[head]
queue[head] = nil
head += 1
if head > 50 {
queue.removeFirst(head)
head = 0
}
return element
}
public var front: T? {
if isEmpty {
return nil
}
return queue[head]
}
public var back: T? {
if isEmpty {
return nil
}
return queue.last ?? nil
}
}
시간제한이 0.5초라서 시간복잡도가 O(1)인 큐를 사용하였다.
반응형
'📝 코테 > BOJ' 카테고리의 다른 글
[Swift] 백준 11650 좌표 정렬하기 (0) | 2023.03.29 |
---|---|
[Swift] 백준 10866 덱 (0) | 2023.03.29 |
[Swift] 백준9012 괄호 (0) | 2023.03.28 |
[Swift] 백준7568 덩치 (0) | 2023.03.28 |
[Swift] 백준10773 (0) | 2023.03.27 |