10828번: 스택백준/단계별로 풀어보기2023. 6. 13. 12:03
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/10828
언어 : Kotlin
문제 설명 :
정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 다섯 가지이다.
- push X: 정수 X를 스택에 넣는 연산이다.
- pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 스택에 들어있는 정수의 개수를 출력한다.
- empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
- top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
- 출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
제한 사항 :
- 시간 제한 : 0.5초 (추가 시간 없음)
- 메모리 제한 : 256MB
입출력 예 :
입력 | 출력 |
14 push 1 push 2 top size empty pop pop pop size empty pop push 3 empty top |
2 2 0 2 1 -1 0 1 -1 0 3 |
7 pop top push 123 top pop top pop |
-1 -1 123 123 -1 -1 |
풀이 :
import java.io.*
import java.util.Stack
fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
val bw = BufferedWriter(OutputStreamWriter(System.out))
val stack = Stack<Int>()
val n = br.readLine().toInt()
repeat(n) {
br.readLine().also {
when (it) {
"pop", "top" -> {
try {
if (it == "top") bw.appendLine("${stack.lastElement()}")
if (it == "pop") bw.appendLine("${stack.pop()}")
} catch (_: Exception) {
bw.appendLine("-1")
}
}
"size" -> {
bw.appendLine("${stack.size}")
}
"empty" -> {
if (stack.isEmpty()) {
bw.appendLine("1")
} else {
bw.appendLine("0")
}
}
else -> {
val (_, x) = it.split(" ")
stack.push(x.toInt())
}
}
}
bw.flush()
}
bw.close()
}
'백준 > 단계별로 풀어보기' 카테고리의 다른 글
9012번: 괄호 (0) | 2023.06.13 |
---|---|
10773번: 제로 (0) | 2023.06.13 |
20920번: 영단어 암기는 괴로워 (0) | 2023.06.12 |
2108번: 통계학 (0) | 2023.06.12 |
26069번: 붙임성 좋은 총총이 (0) | 2023.06.12 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!