Where who wants to meet someone

백준 Swift [28278] 스택 2 본문

백준 알고리즘 문제 기록/스택, 큐, 덱

백준 Swift [28278] 스택 2

Lust3r 2023. 8. 22. 12:13
728x90

난이도

실버 IV

 

문제

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

 

28278번: 스택 2

첫째 줄에 명령의 수 N이 주어진다. (1 ≤ N ≤ 1,000,000) 둘째 줄부터 N개 줄에 명령이 하나씩 주어진다. 출력을 요구하는 명령은 하나 이상 주어진다.

www.acmicpc.net

 

내 답안

var customStack = [Int]()

func pushStack(what: Int) {
    customStack.append(what)
}

func popStack() {
    guard let lastElement = customStack.popLast() else {
        print(-1)
        return
    }

    print(lastElement)
}

func numberOfStack() {
    print(customStack.count)
}

func currentStateOfStack() {
    customStack.isEmpty ? print(1) : print(0)
}

func peekStack() {
    guard let lastElement = customStack.last else {
        print(-1)
        return
    }

    print(lastElement)
}

for _ in 1...Int(readLine()!)! {
    let input = readLine()!.split(separator: " ").map { Int($0)! }

    switch input[0] {
    case 1:
        pushStack(what: input[1])
    case 2:
        popStack()
    case 3:
        numberOfStack()
    case 4:
        currentStateOfStack()
    case 5: peekStack()
    default:
        break
    }
}
  • 빈 스택인 customStack 프로퍼티를 만들고, 각 기능에 해당하는 것을 메서드로 분리하여 만들었다.
  • 입력값 input을 가지고 switch문을 돌려 각 케이스에 맞는 메서드를 수행하게 하여 해결하였다.
  • 처음에 답이 틀려 이유를 생각해보니 pop과 peek에서 옵셔널 바인딩을 할 때 else 구문에 print문을 적어야 했는데 아래에 따로 하다보니 return에서 빠졌었다..