본문 바로가기

알고리즘

[C/C++] 코드업(codeup) 3102번 STL stack

▽문제 바로가기

https://codeup.kr/problem.php?id=3102

 

STL stack

명령어에 따라 동작결과를 순서대로 출력한다. push와 pop은 출력되는 결과가 없음에 유의한다.

codeup.kr


입력

첫째줄에 N이 입력된다.(1<=N<=200)

둘째 줄 부터 각 줄에 하나씩 명령어 N개가 입력된다.

 

출력

명령어에 따라 동작결과를 순서대로 출력한다. push와 pop은 출력되는 결과가 없음에 유의한다.

 

문제 풀이

 

STL stack 사용하지 않고 구현해봤습니다. 생각보단 쉬웠습니다.

 

#include <stdio.h>
#include <iostream>

using namespace std;

int main(){
	
	int n;
	scanf("%d\n", &n);	//엔터로 입력종료
	//200개 명령어, 각 명령어는 10개단어이하
	char command[201][10];
	
	//명령입력
	for(int i=0;i<n;i++) gets(command[i]);
	
	int stack[201] = {0,};
	int top = -1;	//처음 top는 -1
	for(int i=0;i<n;i++){
		//push명령어면
		if(command[i][0]=='p'&&command[i][1]=='u'){
			top++;	//top증가
			int num = 0;
			//숫자칸부터 숫자가 안나올때 까지(1자리 이상 수여도 계산) 
			for(int j=6;;j++){
				if(command[i][j]<48||command[i][j]>57) break;
				num = num*10 + (command[i][j]-48);
			}
			stack[top] = num;
		}
		//top 명령어면
		else if(command[i][0]=='t'){
			if(top==-1) printf("-1\n");
			else printf("%d\n", stack[top]);
		}
		//pop 명령어면
		else if(command[i][0]=='p'&&command[i][1]=='o'){
			if(top!=-1){
				stack[top]=0;
				top--;
			}
		}
		//size 명령어면
		else if(command[i][0]=='s'){
			printf("%d\n", top+1);
		}
		//empty 명령어면
		else if(command[i][0]=='e'){
			if(top==-1) printf("true\n");
			else printf("false\n");
		}
	}
	
	return 0;
}