본문 바로가기

Beakjoon/else

[백준] 1874번 스택 수열 (C++)

문제

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의 두 내용을 서로 변경한다.

참조

https://guiyum.tistory.com/3

https://life-with-coding.tistory.com/406

'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