2164번: 카드2
struct Queue<T> {
var data = [T]()
private var index = 0
var count: Int {
data.count - index
}
mutating func enqueue(_ element: T) {
data.append(element)
}
mutating func dequeue() -> T {
defer {
index += 1
}
return data[index]
}
}
let N = Int(readLine()!)!
var queue = Queue<Int>()
(1...N).forEach { n in
queue.enqueue(n)
}
while queue.count != 1 {
_ = queue.dequeue()
queue.enqueue(queue.dequeue())
}
print(queue.dequeue())
- 카드를 버리는 행위, 맨 아래로 보내는 행위는 전부 카드 뭉치의 위의 카드가 대상입니다.
- 새로운 카드는 맨 아래에 추가, 나가는 카드는 맨위
- 선입선출의 구조
- 따라서 자료 구조 큐를 사용하면 쉽게 풀 수 있는 문제입니다.