본문 바로가기

알고리즘/Stack

백준 10828 스택 - Swift

https://www.acmicpc.net/problem/10828

 

10828번: 스택

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

문제

정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 다섯 가지이다.

  • push X: 정수 X를 스택에 넣는 연산이다.
  • pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 스택에 들어있는 정수의 개수를 출력한다.
  • empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
  • top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.

 

스택을 직접 구현하는 기본적인 문제 입니다. 

 

코드

struct Stack {
    private var stack: [Int] = []
    
    var size: Int {
        return stack.count
    }
    var empty: Int {
        return stack.isEmpty ? 1 : 0
    }
    var top: Int {
        return stack.last ?? -1
    }
    
    mutating func push(_ num: Int) {
        stack.append(num)
    }
    
    mutating func pop() -> Int {
        if !stack.isEmpty {
            return stack.removeLast()
        } else {
            return -1
        }
    }
}

 func sol() {
    let commands: [String : Int] = ["push":1, "pop":2, "size":3, "empty":4, "top":5]
    let n = Int(readLine()!)!
    var stack = Stack()
        
     for _ in 0..<n {
        let input = readLine()!
        let splitedInput = input.split(separator: " ")
        let commandOfUser = commands[String(splitedInput[0])]
            
        switch commandOfUser {
        case 1:
            stack.push(Int(splitedInput[1])!)
        case 2:
            print(stack.pop())
        case 3:
            print(stack.size)
        case 4:
            print(stack.empty)
        case 5:
            print(stack.top)
        default:
            break
        }
    }
 }

sol()
반응형

'알고리즘 > Stack' 카테고리의 다른 글

백준 1874 스택 수열 - Swift  (0) 2022.02.05
백준 11899 괄호 끼워넣기  (0) 2022.01.26
백준 17413 단어 뒤집기 2  (0) 2022.01.24
백준 3986 좋은 단어  (0) 2022.01.22
백준 9012 괄호  (0) 2022.01.19