Mini

백준 5397 cpp// 연결리스트 메모장 본문

Algorithm/연결리스트

백준 5397 cpp// 연결리스트 메모장

Mini_96 2023. 8. 14. 17:06

https://www.acmicpc.net/problem/5397

 

5397번: 키로거

첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한줄로 이루어져 있고, 강산이가 입력한 순서대로 길이가 L인 문자열이 주어진다. (1 ≤ L ≤ 1,000,000) 강산이가 백스페이스를 입

www.acmicpc.net

* 주의

L.insert에서는 cursor갱신 필요없다.

이유 : <. > 에서 커서 이동을 처리하므로.

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

int tc;
list<char> L;

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	cin >> tc;
	while (tc--) {

		string s;
		cin >> s;
		auto now = L.begin();
		for (int i = 0; i < s.size(); ++i) {
			char op = s[i];
			if (op == '<') {
				if (now == L.begin()) continue;
				now--;
			}
			else if (op == '>') {
				if (now == L.end()) continue;
				now++;
			}
			else if (op == '-') {
				if (now == L.begin()) continue;
				now--;
				now=L.erase(now);
			}
			else {	//영어
				L.insert(now, op);
				//now++;
				//커서이동은 <.> 에서 처리
				// -> insert에서 커서갱신할필요 없음
				
			}
		}

		for (auto i : L) {
			cout << i;
		}
		cout << "\n";
		L.clear();
	}

	
}