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();
}
}