Computer Science/C++
백준 C++ | #16 BOJ10828 스택 C++ 문제 풀이
토마토.
2022. 8. 16. 09:20
10828번: 스택
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
문제는 간단했다.
N개의 입력이 주어지면, 이를 스택 매소드로 변환하여 그 결과를 출력해주면 되었다.
구현은 금방 했는데 시간 초과가 났다.
아마도 std::cin, cout 때문인 것 같아 cstring 헤더를 포함시켜 scanf로 수정해주었다.
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stack>
#include <string>
#include <vector>
#include <cstring>
#include <stdio.h>
int main() {
// 명령의 개수
int n;
scanf("%d", &n);
std::vector<int> answer;
std::stack<int> st;
for (int i = 0; i < n; i++) {
char tmp[10];
scanf("%s", tmp);
if (strcmp(tmp, "push") == 0) {
int x;
scanf("%d", &x);
st.push(x);
}
else if (strcmp(tmp,"pop") == 0) {
if (st.size() == 0) {
answer.push_back(-1);
}
else {
answer.push_back(st.top());
st.pop();
}
}
else if (strcmp(tmp, "size") == 0) {
answer.push_back(st.size());
}
else if (strcmp(tmp, "empty") == 0) {
if (st.empty()) {
answer.push_back(1);
}
else {
answer.push_back(0);
}
}
else if (strcmp(tmp, "top") == 0) {
if (st.empty()) {
answer.push_back(-1);
}
else {
answer.push_back(st.top());
}
}
}
std::vector<int>::iterator iter;
for (iter = answer.begin(); iter != answer.end(); iter++) {
std::cout << *iter << std::endl;
}
return 0;
}