키로거는 사용자가 키보드를 누른 명령을 모두 기록한다. 따라서, 강산이가 비밀번호를 입력할 때, 화살표나 백스페이스를 입력해도 정확한 비밀번호를 알아낼 수 있다.
강산이가 비밀번호 창에서 입력한 키가 주어졌을 때, 강산이의 비밀번호를 알아내는 프로그램을 작성하시오. 강산이는 키보드로 입력한 키는 알파벳 대문자, 소문자, 숫자, 백스페이스, 화살표이다.
자료 구조
스택
연결 리스트
이전 [C++] 백준 1406: 에디터 포스팅을 참고하여 풀었다.
전체적인 구조와 틀도 명령을 string
으로 입력받는다는 것만 빼면 거의 비슷하다.
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <list>
using namespace std;
int main()
{
list<char> l;
list<char>::iterator it;
string s;
int t, size;
cin >> t;
while (t--)
{
cin >> s;
l.clear();
size = s.length();
it = l.end();
for (int i = 0; i < size; i++) {
if (s[i] == '<'){
if (it != l.begin()) it--;
}
else if (s[i] == '>') {
if (it != l.end()) it++;
}
else if (s[i] == '-') {
if (it != l.begin()) {
it--;
it = l.erase(it);
}
}
else {
it = l.insert(it, s[i]);
it++;
}
}
for (auto& x : l)
printf("%c", x);
printf("\n");
}
return 0;
}