BOJ - 5397번_키로거

키로거는 사용자가 키보드를 누른 명령을 모두 기록한다. 강산이가 비밀번호 창에서 입력한 키가 주어졌을 때, 강산이의 비밀번호를 알아내는 프로그램 작성하기

참고) 백스페이스를 입력했다면, ‘-‘가 주어진다. 이때 커서의 바로 앞에 글자가 존재한다면, 그 글자를 지운다. 화살표의 입력은 ‘<’와 ‘>’로 주어진다. 이때는 커서의 위치를 움직일 수 있다면, 왼쪽 또는 오른쪽으로 1만큼 움직인다.


풀이

C++ STL list를 이용한다.


소스코드

#include <bits/stdc++.h>
using namespace std;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	int n;
	string s;
	cin >> n;
	
	while(n--) {
		cin >> s;
		list<char> ls;
		auto cur = ls.begin();
		
		for(auto c : s) {
			if(c=='<') {
				if(cur!=ls.begin()) {
					cur--;
				}
			}
			else if(c=='>') {
				if(cur!=ls.end()) {
					cur++;
				}
			}
			else if(c=='-') {
				if(cur!=ls.begin()) {
					cur--;
					cur = ls.erase(cur);
				}
			}
			else {
				ls.insert(cur,c);
			}
		}
		for(auto c : ls) {
			cout << c;
		}
		cout << "\n";
	}
}