Computer Science/C++

백준 C++ | #16 BOJ10828 스택 C++ 문제 풀이

토마토. 2022. 8. 16. 09:20

10828번: 스택 (acmicpc.net)

 

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;
}