728x90
반응형

문제

10828번 : 스택

 

10828번: 스택

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.

www.acmicpc.net

내가 작성한 코드 (C++ 성공)

#include <iostream>
#include <string.h>
#include <vector>

using namespace std;


int main(){
	vector<int> stack;
	
	int n;
	cin >> n;
	
	char command[100];
	
	for(int i=0; i<n; i++){
		cin >> command;
		
		if(!strcmp(command, "push")){
			int num;
			cin >> num;
			stack.push_back(num);
		}
		if(!strcmp(command, "pop")){
			if(stack.begin() == stack.end()){
				cout << "-1\n";
			} else {
				cout << stack[stack.size()-1]<< "\n";
				stack.erase(stack.end()-1);
			}			
		}
		if(!strcmp(command, "size")){
			cout << stack.size() << "\n";
		}
		if(!strcmp(command, "empty")){
			if(stack.size() == 0) {
				cout << "1\n";
			} else {
				cout << "0\n";
			}
		}
		if(!strcmp(command, "top")){
			if(stack.size() == 0){
				cout << "-1\n";
			} else{
				cout << stack[stack.size()-1] << "\n";	
			}
		}
	}
	
	return 0;
}

 

정리

command를 입력하고나서 문자열을 비교해주는 strcmp() 함수를 사용해서 풀어보았다.

"push" 일 경우,
vector 의 push_back() 함수를 이용해서 숫자를 넣어주었다.

"pop" 일 경우,
아무것도 들어있지 않으면 "-1" 을 출력해주고
값이 들어있다면 마지막 값을 출력해주고 erase() 함수를 통해 값을 지워준다.
size()-1 을 한 이유는 vector에서 마지막 같은 널값이기 때문에 -1을 해주어야 마지막 값을 찾을 수 있다.

"size" 일 경우,
size() 함수를 사용해서 크기를 출력해준다.

"empty" 일 경우,
size() 함수를 사용해 크기가 0인지 아닌지 판별해 0 또는 1을 출력해준다.

"top" 일 경우,
비어있을 경우 "-1" 을 출력해주고, "pop" 일 경우와 같이 마지막에 들어있는 값을 출력해준다.

스택의 기본적인 명령어와 명령어에 대한 처리를 직접 해볼 수 있는 문제였다.

728x90
반응형
복사했습니다!