출처:https://www.acmicpc.net/problem/5397
창영이는 강산이의 비밀번호를 훔치기 위해서 강산이가 사용하는 컴퓨터에 키로거를 설치했다. 며칠을 기다린 끝에 창영이는 강산이가 비밀번호 창에 입력하는 글자를 얻어냈다.
키로거는 사용자가 키보드를 누른 명령을 모두 기록한다. 따라서, 강산이가 비밀번호를 입력할 때, 화살표나 백스페이스를 입력해도 정확한 비밀번호를 알아낼 수 있다.
List는 항상 다룰 때마다, Iterator를 주의해서 다루어야 한다.
우리가 친숙한 Vector는 말 그대로 '연속적인' 메모리공간을 잡기 때문에, iterator또한 꽤 직관적으로 움직이지만 , List는 완전 다른 메모리 공간에 있기 때문에 iterator를 잘 생각해줘야한다.
#include <bits/stdc++.h>
#define fastio cin.tie(0)->sync_with_stdio(0)
using namespace std;
int main()
{
fastio;
int T;
cin >> T;
while (T--)
{
string keylogger;
cin >> keylogger;
list<char> password;
list<char>::iterator iter = password.begin();
for (char k : keylogger)
{
if (k == '<')
{
if (iter != password.begin())
iter--;
continue;
}
if (k == '>')
{
if (iter != password.end())
iter++;
continue;
}
if (k == '-')
{
if (iter != password.begin())
iter = password.erase(--iter);
continue;
}
password.insert(iter, k);
}
for (iter = password.begin(); iter != password.end(); iter++)
{
cout << *iter;
}
cout << '\n';
}
return 0;
}