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 |