반응형
https://www.acmicpc.net/problem/10828
[ 코드 ]
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main() {
stack<int> S;
int n;
cin >> n;
for (int i = 0; i < n; i++) {
string str;
cin >> str;
if (str == "push") {
int x;
cin >> x;
S.push(x);
}
else if (str == "top") {
if (S.empty())cout << "-1" << endl;
else cout << S.top() << endl;
}
else if (str == "pop") {
if (S.empty())cout << "-1" << endl;
else {
cout << S.top() << endl;
S.pop();
}
}
else if (str == "empty") {
cout << S.empty() << endl;
}
else {
cout << S.size() << endl;
}
}
return 0;
}
스택에 대한 기본적인 이해를 하는 문제.
※ 스택이란?
한쪽 끝으로만 자료의 삽입, 삭제 작업이 이루어지는 자료구조.
LIFO (Last In First Out) 혹은 FILO (First In Last Out) 구조.
쉽게 말해, 한 쪽 끝이 막혀있는 통 구조같은 것을 생각하면 간단하다.
위 코드는 STL의 스택을 이용해 구현하였다.
#include<stack>을 통해 stack 라이브러리를 호출하는 것이다.
혹은 직접 구현하는 방법도 있다.
#include <iostream>
#include <string.h>
using namespace std;
int stack[10001], top = -1;
void push(int x){
stack[++top] = x;
}
int empty() {
if (top < 0)return 1;
else return 0;
}
void pop() {
if (empty() == 1)cout << "-1"<<"\n";
else {
cout << stack[top] << "\n";
stack[top--] = 0;
}
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
char str[10];
cin >> str;
if (!strcmp(str, "push")) {
int x; cin >> x;
push(x);
}
else if (!strcmp(str, "top")) {//top()함수를 만들면 top 변수와 겹치기 때문에 만들지 않음
if (empty() == 1)cout << "-1"<<"\n";
else cout << stack[top] << "\n";
}
else if (!strcmp(str, "pop")) {
pop();
}
else if (!strcmp(str, "empty")) {
cout << empty() << "\n";
}
else {//empty()함수는 간단하기 때문에 함수를 만들지 않음
cout << top + 1 << "\n";
}
}
return 0;
}
이 방법은 다음 포스트에 더 자세히 나와있지만, c++을 쓰는 이상 추천하는 방법은 아니다.
반응형
'Algorithm > 백준' 카테고리의 다른 글
[백준] 1966번 : 프린터 큐 / c++ (0) | 2020.05.25 |
---|---|
[백준] 1874번 : 스택 수열 / c++ (0) | 2020.05.22 |
[백준] 1157번 : 단어 공부 / c++ (0) | 2020.05.22 |
[백준] 11060번 : 점프 점프 / c++ (0) | 2020.05.21 |
[백준] 1037번 : 약수 / c++ (0) | 2020.05.19 |