Algorithm/Baekjoon Online Judge
백준 10828번 스택 [C++]
감성적인 개발자
2021. 7. 21. 23:57
https://www.acmicpc.net/problem/10828
10828번: 스택
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
소스코드
#include<iostream>
using namespace std;
int mystack[10000];
int top = 0;
void solution(string s){
if (s == "push"){
cin >> mystack[top];
top++;
}
else if(s == "pop"){
if(top == 0)
cout << "-1" << '\n';
else{
cout << mystack[top - 1] << '\n';
top--;
}
}
else if(s == "size"){ cout << top << '\n'; }
else if(s == "empty"){
if(top == 0) cout << "1" << '\n';
else cout << "0" << '\n';
}
else if(s == "top"){
if(top == 0) cout << "-1" << '\n';
else cout << mystack[top - 1] << '\n';
}
}
int main(){
int N;
string instruct;
cin >> N;
for(int i = 0; i < N; i++){
cin >> instruct;
solution(instruct);
}
}
처음 실행했을 때 원하는 출력이 나오지않아 string 비교연산자, call by reference 등 다 찾아보며 고군분투했다. 그러다 push 연산 후 top++를 발견했고 top이 1 증가된 상태로 대기중이란 것을 알았다.
코드를 더 멋지게 만들어 제출하려했으나 알고리즘 스터디 깃헙에 푸시할 시간이 다가왔고 이대로 제출했다. 스프링 부트 팀프로젝트 중이라 이번주는 간단한 문제들만 풀고있지만 프로젝트가 끝나면 임계점(?)을 넘을 수 있는 골드 문제 혹은 프로그래머스 문제에 도전해봐야겠다.