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 |
댓글