728x90
https://www.acmicpc.net/problem/10828
문제
정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 다섯 가지이다.
- push X: 정수 X를 스택에 넣는 연산이다.
- pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 스택에 들어있는 정수의 개수를 출력한다.
- empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
- top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
해설
stack을 이용하여 쉽게 풀 수 있는 문제이지만 직접 구현을 해보기 위해 배열을 만들어 각 명령에 따라 작동하는 방식을
구현해보았다.
우선 위치를 표기해줄 top이라는 변수를 -1로 선언했다.
명령문이
1. push -> top++를 하여 배열[0]에 입력한 값이 들어가게 한다.
2. pop -> top이 -1이라면 스택이 비어있는 경우이므로 -1을 출력하고 아니라면 stack[top]을 출력한 후 top--를 통해
원래의 top위치에 있는 배열을 초기화시킨다.
3. size -> top + 1만큼의 수가 들어가있으므로 이를 출력한다.
4. empty -> 비어있을 때(top = -1)라면 -1을 출력하고, 아니라면 0을 출력한다.
5. top -> 비어있을 때 -1을 출력, 아니라면 stack[top]을 출력한다.
소스 코드
배열을 이용하여 구현
import java.util.*
fun main() {
val n = readLine()!!.toInt()
val stack = arrayOfNulls<Int>(n)
var top = -1
for(i in 0 until n) {
val st = StringTokenizer(readLine())
val commend = st.nextToken()
if(commend == "push") {
val x = st.nextToken().toInt()
top++
stack[top] = x
}
else if(commend == "pop") {
if(top == -1) println(-1)
else {
println(stack[top])
top--
}
}
else if(commend == "size") println(top + 1)
else if(commend == "empty") {
if(top == -1) println(1)
else println(0)
}
else {
if(top == -1) println(-1)
else println(stack[top])
}
}
}
스택을 이용하여 구현
import java.util.*
fun main() {
val n = readLine()!!.toInt()
var stack = Stack<Int>()
for(i in 0 until n){
val st = StringTokenizer(readLine())
val commend = st.nextToken()
if(commend == "push") stack.push(st.nextToken().toInt())
else if(commend == "pop") {
if(stack.isEmpty()) println(-1)
else println(stack.pop())
}
else if(commend == "size") println(stack.size)
else if(commend == "empty") {
if(stack.isEmpty()) println(1)
else println(0)
}
else {
if(stack.isEmpty()) println(-1)
else println(stack.peek())
}
}
}
728x90
'PS(Problem Solving) > BOJ' 카테고리의 다른 글
[백준/BOJ] 9012번: 괄호 (1) | 2021.11.29 |
---|---|
[백준/BOJ] 10773번: 제로 (0) | 2021.11.28 |
[백준/BOJ] 10093번: 숫자 (0) | 2021.11.25 |
[백준/BOJ] 11034번: 캥거루 세마리2 (0) | 2021.11.23 |
[백준/BOJ] 11718번: 그대로 출력하기 (0) | 2021.11.23 |
댓글