문제
https://www.acmicpc.net/problem/1874
1874번: 스택 수열
1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.
www.acmicpc.net
코드
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main(){
int n;
stack<int> s;
string pm = "";
int k=0;
cin >> n;
for(int i=0; i<n; i++){
int a;
cin >> a;
if(a > k){
while(a > k){
s.push(++k);
pm += '+';
}
s.pop();
pm += '-';
}
else{
bool flag = true;
if(a != s.top()){
flag = false;
}
s.pop();
pm += '-';
if(!flag){
cout << "NO";
return 0;
}
}
}
for(char c : pm){
cout << c << '\n';
}
return 0;
}
정리
처음에는 stack 라이브러리를 이용하지 않고 string하고 몇 개의 변수를 이용해 구현하려고 했지만 쉽지 않았다. 그래서 결국에는 다른 사람의 코드를 참고했고 stack 라이브러리를 이용해 구현했다. s.top()을 이용해 stack에 가장 위에 있는 수를 비교할 수 있어서 문제를 정확히 풀 수 있다.
stack STL
#include <stack>을 해주어야 사용할 수 있다.
stack.push(e); stack에 e를 추가한다.
stack.pop(); stack의 top 데이터를 삭제한다.
stack.top(); stack의 top 데이터를 반환한다.
stack.size(); stack의 size를 반환한다.
stack.empty(); stack이 비어있으면 true, stack이 비어 있지 않으면 false를 반환한다.
swap(stack1, stack2) stack1과 stack2의 두 내용을 서로 변경한다.
참조
'Beakjoon > else' 카테고리의 다른 글
[백준] 2108번 통계학 (C++) (0) | 2022.01.12 |
---|---|
[백준] 1966번 프린터 큐 (C++) - priority queue (0) | 2022.01.11 |
[백준] 10866번 덱 (C++) (0) | 2022.01.08 |
[백준] 10845번 큐 (C++) (0) | 2022.01.08 |
[백준] 10828번 스택 (C++) (0) | 2022.01.08 |