- toc {:toc}
๋ฌธ์
์ฐฝ์์ด๋ ๊ฐ์ฐ์ด์ ๋น๋ฐ๋ฒํธ๋ฅผ ํ์น๊ธฐ ์ํด์ ๊ฐ์ฐ์ด๊ฐย ์ฌ์ฉํ๋ ์ปดํจํฐ์ ํค๋ก๊ฑฐ๋ฅผ ์ค์นํ๋ค. ๋ฉฐ์น ์ ๊ธฐ๋ค๋ฆฐ ๋์ ์ฐฝ์์ด๋ ๊ฐ์ฐ์ด๊ฐ ๋น๋ฐ๋ฒํธ ์ฐฝ์ ์ ๋ ฅํ๋ ๊ธ์๋ฅผ ์ป์ด๋๋ค.
ํค๋ก๊ฑฐ๋ ์ฌ์ฉ์๊ฐ ํค๋ณด๋๋ฅผ ๋๋ฅธ ๋ช ๋ น์ ๋ชจ๋ ๊ธฐ๋กํ๋ค. ๋ฐ๋ผ์, ๊ฐ์ฐ์ด๊ฐ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ ๋, ํ์ดํ๋ ๋ฐฑ์คํ์ด์ค๋ฅผ ์ ๋ ฅํด๋ย ์ ํํ ๋น๋ฐ๋ฒํธ๋ฅผ ์์๋ผ ์ ์๋ค.
๊ฐ์ฐ์ด๊ฐ ๋น๋ฐ๋ฒํธ ์ฐฝ์์ ์ ๋ ฅํ ํค๊ฐ ์ฃผ์ด์ก์ ๋, ๊ฐ์ฐ์ด์ ๋น๋ฐ๋ฒํธ๋ฅผ ์์๋ด๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.ย ๊ฐ์ฐ์ด๋ ํค๋ณด๋๋ก ์ ๋ ฅํ ํค๋ ์ํ๋ฒณ ๋๋ฌธ์, ์๋ฌธ์, ์ซ์, ๋ฐฑ์คํ์ด์ค, ํ์ดํ์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ํ ์คํธ ์ผ์ด์ค๋ ํ์ค๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ๊ฐ์ฐ์ด๊ฐ ์ ๋ ฅํ ์์๋๋ก ๊ธธ์ด๊ฐ L์ธ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ค. (1 โค L โค 1,000,000) ๊ฐ์ฐ์ด๊ฐ ๋ฐฑ์คํ์ด์ค๋ฅผ ์ ๋ ฅํ๋ค๋ฉด, โ-โ๊ฐ ์ฃผ์ด์ง๋ค. ์ด๋ ์ปค์์ ๋ฐ๋ก ์์ ๊ธ์๊ฐ ์กด์ฌํ๋ค๋ฉด, ๊ทธ ๊ธ์๋ฅผ ์ง์ด๋ค. ํ์ดํ์ ์ ๋ ฅ์ โ<โ์ โ>โ๋ก ์ฃผ์ด์ง๋ค. ์ด๋๋ ์ปค์์ ์์น๋ฅผ ์์ง์ผ ์ ์๋ค๋ฉด, ์ผ์ชฝ ๋๋ ์ค๋ฅธ์ชฝ์ผ๋ก 1๋งํผ ์์ง์ธ๋ค. ๋๋จธ์ง ๋ฌธ์๋ ๋น๋ฐ๋ฒํธ์ ์ผ๋ถ์ด๋ค. ๋ฌผ๋ก , ๋์ค์ ๋ฐฑ์คํ์ด์ค๋ฅผ ํตํด์ ์ง์ธ ์๋ ์๋ค. ๋ง์ฝ ์ปค์์ ์์น๊ฐ ์ค์ ๋ง์ง๋ง์ด ์๋๋ผ๋ฉด, ์ปค์ ๋ฐ ์ปค์ ์ค๋ฅธ์ชฝ์ ์๋ ๋ชจ๋ ๋ฌธ์๋ ์ค๋ฅธ์ชฝ์ผ๋ก ํ ์นธ ์ด๋ํ๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด์, ๊ฐ์ฐ์ด์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๋ค. ๋น๋ฐ๋ฒํธ์ ๊ธธ์ด๋ ํญ์ 0๋ณด๋ค ํฌ๋ค.
์ถ์ฒ:https://www.acmicpc.net/problem/5397
ํ์ด
๊ธฐ๋ฅ ๊ทธ๋๋ก ๊ตฌํํ๋ฉด ๋จ.
์ฒ์์๋ -์ ๋ฆฌ์คํธ์ ์ถ๊ฐ๋๋ ๋ถ๋ถ์ pop_back, push_back์ผ๋ก ์๊ฐํ๊ณ ๊ตฌํํ๋๋ฐ ๋ฐฉํฅํค๋ฅผ ํตํด์ ์ปค์๊ฐ ์์นํ๋ ๋ถ๋ถ์ด ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ erase, insert๋ฅผ ์ฌ์ฉํด์ผ ํจ์ ๊นจ๋ฌ์์.
// ์ฐ๊ฒฐ๋ฆฌ์คํธ
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int T;
cin >> T;
string str;
while(T--){
list<char> L = {};
cin >> str;
auto cursor = L.begin();
for(auto c : str){
if(c == '<')
{if(cursor != L.begin()) cursor--;}
else if(c == '>')
{if(cursor != L.end()) cursor++;}
else if(c == '-'){
if(cursor != L.begin()){
cursor--;
cursor = L.erase(cursor);
}
}
else{
L.insert(cursor, c);
}
}
for(auto elem : L){
cout << elem;
}
cout << endl;
}
return 0;
}