Problem Solving/BOJ

[백준 / BOJ] C++ 27497 알파벳 블록

nageune 2023. 2. 20. 16:45
728x90
반응형

27497번: 알파벳 블록

 

문제

https://www.acmicpc.net/problem/27497

 

27497번: 알파벳 블록

첫째 줄에 버튼을 누른 횟수 $N$이 주어진다. $(1 \leq N \leq 1\,000\,000)$ 둘째 줄부터 $N$개의 줄에는 버튼을 누른 순서대로 누른 버튼에 대한 정보를 주며 아래와 같은 형식으로 주어진다. 1 c : 문자열

www.acmicpc.net

 

 

풀이

덱의 기본적인 쿼리를 사용하는 문제다. 가장 마지막에 추가한 수가 덱의 앞인지 뒤인지 판단하기 위해 스택을 만들어 하나씩 pop 하며 판단했다.

 

 

코드

#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  deque<char> dq;
  stack<int> s;
  int n;
  cin >> n;
  while (n--) {
    int cmd;
    char c;
    cin >> cmd;
    if (cmd == 1) {
      cin >> c;
      dq.push_back(c);
      s.push(-1);
    } else if (cmd == 2) {
      cin >> c;
      dq.push_front(c);
      s.push(1);
    } else {
      if (!s.empty()) {
        if (s.top() == 1) {
          dq.pop_front();
          s.pop();
        } else if (s.top() == -1) {
          dq.pop_back();
          s.pop();
        }
      }
    }
  }
  if (dq.empty())
    cout << 0;
  else
    for (int i = 0; i < dq.size(); i++)
      cout << dq[i];
  return 0;
}

 

728x90
반응형