반응형
출처: https://www.acmicpc.net/problem/10828
Approach
Stack 구현하는 문제이다.
문제 조건이 어렵지 않기 때문에 자료구조만 구현해서 해결할 수 있다.
- push X: 정수 X를 스택에 넣는 연산
- pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수 출력
만약 스택에 들어있는 정수가 없는 경우에는 -1 출력
- size: 스택에 들어있는 정수 개수 출력
- empty: 스택이 비어있으면 1, 아니면 0 출력
- top: 스택의 가장 위에 있는 정수 출력
만약 스택에 들어있는 정수가 없는 경우 -1 출력
#include <iostream>
#include <stack>
#include <cstring>
using namespace std;
stack<int> st;
int main(void)
{
// freopen("input.txt", "r", stdin);
int N, val; scanf("%d", &N);
for (int i = 0; i < N; i++)
{
char cmd[10]; scanf("%s", cmd);
if (!strcmp(cmd, "push"))
{
scanf("%d", &val);
st.push(val);
}
else if (!strcmp(cmd, "pop"))
{
if (!st.empty())
{
printf("%d\n", st.top());
st.pop();
}
else
{
printf("-1\n");
}
}
else if (!strcmp(cmd, "size"))
{
printf("%d\n", st.size());
}
else if (!strcmp(cmd, "empty"))
{
printf("%d\n", st.empty());
}
else if (!strcmp(cmd, "top"))
{
if (!st.empty())
{
printf("%d\n", st.top());
}
else
{
printf("-1\n");
}
}
}
}
Java
import java.util.Arrays;
import java.util.Scanner;
class Stack{
int top;
int[] stack;
public Stack(int size) {
top = -1;
stack = new int[size];
}
// 정수 x를 스택에 넣는 연산
public void push(int x) {
stack[++top] = x;
}
// 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력
// 만약 스택에 들어있는 정수가 없는 경우 -1 출력
public int pop() {
if(top == -1) {
return -1;
}
return stack[top--];
}
// 스택에 들어있는 정수의 개수를 출력한다.
public int size() {
return (top+1);
}
// 스택이 비어있으면 1, 아니면 0을 출력
public int empty() {
if(top == -1) {
return 1;
}
return 0;
}
// 스택의 가장 위에 있는 정수를 출력한다.
// 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
public int peek() {
if(top == -1) {
return -1;
}
return stack[top];
}
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(sc.nextLine());
int[] result = new int[n];
int idx = -1;
Stack st = new Stack(n);
int temp;
for(int i = 0; i < n; i++) {
String[] str = sc.nextLine().split(" ");
if(str[0].equals("push")){
int x = Integer.parseInt(str[1]);
st.push(x);
}
else if(str[0].equals("pop")){
result[++idx] = st.pop();
}
else if(str[0].equals("top")){
result[++idx] = st.peek();
}
else if(str[0].equals("size")){
result[++idx] = st.size();
}
else if(str[0].equals("empty")){
result[++idx] = st.empty();
}
}
for(int i=0; i <= idx; i++) {
System.out.println(result[i]);
}
}
}
반응형
'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글
[BOJ] 백준 18258 큐 2 (0) | 2021.07.22 |
---|---|
[BOJ] 백준 10845 큐 (0) | 2021.07.22 |
[BOJ] 백준 2869 달팽이는 올라가고 싶다. (0) | 2021.07.21 |
[BOJ] 백준 10773 제로 (0) | 2021.07.21 |
[BOJ] 백준 1712 손익분기점 (0) | 2021.07.05 |
댓글