class CircularQueue { private var data: [Int] private var front, rear, size : Int init(size: Int){ self.front = -1 self.rear = -1 self.size = size self.data = Array(repeating: 0, count: size) } func isEmpty() -> Bool { return self.front == -1 } func isFull() -> Bool { return (self.rear + 1)%self.size == self.front } func info(){ if self.isEmpty(){ print("Empty!") return } var i: Int = self.front while true { print("\(self.data[i]) ",terminator: " ") if i == self.rear { print() break } i = (i+1)%self.size } } func enqueue(to value: Int){ if self.isFull() { print("Full!!!") return } if self.isEmpty(){ self.front = 0 } self.rear = (self.rear + 1)%self.size self.data[self.rear] = value } func dequeue() -> Int? { if self.isEmpty(){ return nil } let value: Int = self.data[self.front] if(self.front == self.rear){ self.front = -1 self.rear = -1 } else { self.front = (self.front+1) % self.size } return value } func peek() -> Int? { if self.isEmpty(){ return nil } return self.data[self.front] } } let cirQueue: CircularQueue = CircularQueue(size: 10) var exitFlag: Bool = true while exitFlag { print("명령어를 입력하세요 (enqueue [값], dequeue, peek, info, exit):") if let input = readLine() { let components = input.split(separator: " ") let order = String(components.first ?? "") switch order { case "enqueue" : if components.count == 2, let value = Int(components[1]) { cirQueue.enqueue(to: value) print("\(value) enqueue!") } else { print("enqueue 명령어 뒤에 공백에 이어서 숫자를 입력해야합니다.") } case "dequeue" : if let value = cirQueue.dequeue(){ print("\(value) dequeue!!") } else { print("Empty!!") } case "peek" : if let value = cirQueue.peek(){ print("\(value) peek!!") } else { print("Empty!!") } case "info" : cirQueue.info() case "exit" : exitFlag = false print("Exit!!!") default : print("제대로 된 명령어를 입력하세요") } } else { print("제대로 입력해주세요") } }