페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#8073

Tutorial : STL Stack 1초 512MB

문제

Beginner Coder 의 #1102 번 문제를 STL Stack 으로 다시 구현해 보자.

Stack 자료구조는 STL 로 구현할 수 있고, 실제로 이것이 훨씬 편하다.

Stack 을 선언하는 방법은 아래와 같다.

#include <stack>

using namespace std;

stack <int> s;

위 코드에서,<int> 는 스택에 담을 자료형을 의미하고, s 은 그 스택의 이름이다. ( 스택 이름은 자유롭게 설정 가능 )

만약

stack <char> s2;

이렇게 선언한다면, s2 는 char 를 담는 스택이 되는 것이다.

스택을 선언한 후, 여기에 적용할 대표적인 메소드(함수)는 아래와 같다.


함수 1 : empty()

사용 예시 : if ( s.empty() == true )...

empty() 함수는 true 또는 false 를 return 하는 bool 함수다.

스택이 비어있으면 true 를,

스택이 안 비어있으면 false 를 return 한다.


함수 2 : push()

사용 예시 : s.push(7);

이는 s 라는 스택 맨 위에 7 을 삽입한다는 의미다. 즉, 7 이 s 의 맨 꼭대기 (top) 원소가 된다.

int k = 7;

s.push(k);

위처럼 해도 s 에 7 이 맨 위에 삽입된다.


함수 3 : pop()

사용 예시 : s.pop();

이는 스택에서 "맨 꼭대기" 에 있는 원소를 제거하도록 동작한다.

제거만 할 뿐이지, 맨 꼭대기 원소의 값을 알려주지는 않는다.

단, 스택이 비어있는 상태에서 pop() 을 호출하면 런타임 에러가 발생한다.

비어있는 스택에서 원소를 제거할 수는 없기 때문이다.

따라서 항상 pop() 을 하기 전에 empty() 함수를 먼저 호출해줘서 비어있는지 확인하는 습관을 들이자.


함수 4 : top()

사용 예시 : if (s.top() == 7)... 또는 int t = s.top();

top() 함수는 스택에서 맨 꼭대기에 있는 원소의 값을 return 한다.

맨 꼭대기의 값을 알려줄 뿐이고, 그 원소를 제거하지는 않는다.

top() 도 pop() 과 마찬가지로, 스택이 비어있는 상태에서 호출하면 런타임 에러가 발생한다.

따라서 항상 top() 을 실행하기 전에 empty() 함수를 먼저 호출해줘서 비어있는지 확인하는 습관을 들이자.


함수 5 : size()

사용 예시 : if (s.size() == 0)... 또는 int sz = s.size();

size() 함수는 스택의 원소의 개수를 return 한다.

만약 스택이 비어있다면 size() 함수는 0 을 return 할 것이다.


이제 위 5가지 함수를 이용하여, #1102 문제를 다시 구현해보자.

<처리조건>

주어진 명령은 다음의 3가지이다.

1. "i a"는 a 라는 정수를 스택에 넣는다. 이때, a는 10,000 이하의 자연수이다.

2. "o"는 스택에서 데이터를 빼고, 그 데이터를 출력한다. 만약 스택이 비어있으면, "empty"를 출력한다.

3. "c"는 스택에 쌓여있는 데이터의 수를 출력한다.


입력

첫 줄에 N이 주어진다. N은 주어지는 명령의 수이다. (1≤N≤100)

둘째 줄부터 N+1줄까지 N개의 명령이 주어지는데, 한 줄에 하나씩 주어진다.


출력

각 명령에 대한 출력 값을 한 줄에 하나씩 출력한다.

출력 내용이 하나도 없는 경우는 주어지지 않는다.


예제1

입력
7
i 7
i 5
c
o
o
o
c
출력
2
5
7
empty
0

출처

@againalgo

역링크 공식 문제집만