본문 바로가기

컴퓨터/백준 알고리즘

백준 알고리즘 10828번: 스택 [C++]

문제 출처: www.acmicpc.net/problem/10828

 

10828번: 스택

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

www.acmicpc.net

1. 코드

#include <iostream>
#include <string>

using namespace std;
int arr[10001];
int index;

void push(int number)
{
	arr[index] = number;
	index++;
}
int size()
{
	return index;
}

int top()
{
	return (!size()) ? -1 : arr[index - 1];
}

bool empty()
{
	return (!size()) ? true : false;
}

void pop()
{
	if (!size())
		cout << -1 << endl;
	else
	{
		cout << arr[index - 1] << endl;
		index--;
	}
}
int main(void)
{
	string com;		//명령어
	int num;		//push할 정수
	int n;			//테스트 케이스 수
	cin >> n;
	
	while (n--)
	{
		cin >> com;
		
		if ("push" == com)
		{
			cin >> num;		//push일 경우에만 정수 입력
			push(num);
		}
		else if ("top" == com)
			cout << top() << endl;
		else if ("size" == com)
			cout << size() << endl;
		else if ("empty" == com)
			cout << empty() << endl;
		else if ("pop" == com)
			pop();
	}
	return 0;
}

(실행)

2. 풀이

문제 풀이 방법은 간단하다. 문제에서 요구하는 명령어들에 대한 것을 각각 함수로 만들고 string 변수를 이용하여 쉽게 명령어를 파악하여 해당하는 명령을 실행하면 된다. 그리고 index는 스택 포인터 역할을 해서 스택포인터가 0을 가리키면 크기또한 0이다.

pop이나 top에서 배열의 크기 여부를 확인할 때 index 값을 이용해 파악할 수 있지만 조금 더 알아보기 쉽게 하기 위해서 size() 함수를 호출하는 형식으로 코드를 작성하였다. 제출해서 걸린 시간은 약 0.4초 정도여서 아슬아슬하지만 통과하였다.

3. 느낀 점

처음에 vector를 이용해서 문제를 해결하려고 했으나 vector는 비어있을 경우 문제에서 요구한 top명령어와 pop 명령어를 구현하기에는 애매해서 함수를 정의하여 부르는 방식을 사용했다.