class Stack { private var data: [Int] private let maxSize: Int private var top: Int init(size: Int) { self.maxSize = size self.data = Array(repeating: 0, count: size) self.top = -1 } func isFull() -> Bool { return self.top == self.maxSize - 1 } func isEmpty() -> Bool { return self.top == -1 } func push(to value: Int) { if isFull() { print("스택 오버플로우! 더 이상 추가할 수 없습니다.") return } self.top += 1 self.data[top] = value } func pop() -> Int? { if isEmpty() { return nil } let popValue = self.data[top] self.top -= 1 return popValue } func peek() -> Int? { if isEmpty() { return nil } return self.data[top] } func info(){ if isEmpty() { print("스택이 비어있습니다.") return } print("스택목록 : ", terminator: "") for i in 0...self.top { print(self.data[i], terminator: " ") } print() } } let stack: Stack = Stack(size: 10) var exitFlag = true while exitFlag { print("명령어를 입력하세요 (push [값], pop, peek, info, exit):") if let input = readLine(){ let components = input.split(separator: " ") let order = String(components.first ?? "") switch order { case "push": if components.count == 2, let value = Int(components[1]) { stack.push(to: value) print("\(value)를 push했습니다.") } else { print("push 명령어는 'push [숫자]' 형식으로 입력해야 합니다.") } case "pop": if let popValue = stack.pop() { print("Pop: \(popValue)") } else { print("스택이 비어있습니다.") } case "peek": if let peekValue = stack.peek() { print("Peek: \(peekValue)") } else { print("스택이 비어있습니다.") } case "info": stack.info() case "exit": exitFlag = false print("종료합니다") default: print("알 수 없는 명령어입니다.") } } else{ print("제대로 입력해주세요") } }