문제 출처: www.acmicpc.net/problem/10828
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 명령어를 구현하기에는 애매해서 함수를 정의하여 부르는 방식을 사용했다.
'컴퓨터 > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 9093번: 단어 뒤집기 [C++] (0) | 2021.03.27 |
---|---|
백준 알고리즘 5086번: 배수와 약수 [C++] (0) | 2021.03.27 |
백준 알고리즘 11399번: ATM [C++] (0) | 2021.03.25 |
백준 알고리즘 11047번: 동전 0 [C++] (0) | 2021.03.20 |
백준 알고리즘 9095번: 1, 2, 3 더하기 [C++] (0) | 2021.03.16 |