본문 바로가기
알고리즘 문제풀이/백준

[백준 5397] 키로거

by m2162003 2020. 11. 29.

www.acmicpc.net/problem/5397

 

5397번: 키로거

첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한줄로 이루어져 있고, 강산이가 입력한 순서대로 길이가 L인 문자열이 주어진다. (1 ≤ L의 길이 ≤ 1,000,000) 강산이가 백스페이

www.acmicpc.net

 

1. 스택 2개 만들어서 풀기

 

#include <iostream>
#include <stack>
using namespace std;

int main(void)
{
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin >> n;

  stack<char> s1, s2;

  for (int i = 0; i < n; i++)
  {
    string str;
    cin >> str;

    for (int j = 0; j < str.length(); j++)
    {
      if (str[j] == '<')
      {
        if (!s1.empty())
        {
          s2.push(s1.top());
          s1.pop();
        }
      }
      else if (str[j] == '>')
      {
        if (!s2.empty())
        {
          s1.push(s2.top());
          s2.pop();
        }
      }
      else if (str[j] == '-')
      {
        if (!s1.empty())
        {
          s1.pop();
        }
      }
      else
      {
        s1.push(str[j]);
      }
    }

    while (!s1.empty())
    {
      s2.push(s1.top());
      s1.pop();
    }
    while (!s2.empty())
    {
      cout << s2.top();
      s2.pop();
    }
    cout << "\n";
  }
  return 0;
}

 

2. 배열 사용해서 풀기

#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;

char ls[1000001];
char rs[1000001];
int lp, rp;
int main(void)
{
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin >> n;

  for (int i = 0; i < n; i++)
  {
    lp = 0, rp = 0;
    string str;
    cin >> str;

    for (int j = 0; j < str.length(); j++)
    {
      if (str[j] == '<')
      {
        if (lp > 0)
        {
          rs[rp++] = ls[--lp];
        }
      }
      else if (str[j] == '>')
      {
        if (rp > 0)
        {
          ls[lp++] = rs[--rp];
        }
      }
      else if (str[j] == '-')
      {
        if (lp > 0)
        {
          lp--;
        }
      }
      else
      {
        ls[lp++] = str[j];
      }
    }

    ls[lp] = rs[rp] = 0;
    reverse(rs, rs + rp);

    cout << ls << rs << "\n";
    memset(ls, 0, sizeof(ls));
    memset(rs, 0, sizeof(rs));
  }
  return 0;
}

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준 6198] 옥상 정원 꾸미기  (0) 2020.11.30
[백준 4889] 안정적인 문자열  (0) 2020.11.29
[백준 1406] 에디터  (0) 2020.11.29
[백준 10814] 나이순 정렬  (0) 2020.11.28
[백준 1181] 단어 정렬  (0) 2020.11.28

댓글