https://www.acmicpc.net/problem/5397
* 주의
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();
}
}
'Algorithm > 연결리스트' 카테고리의 다른 글
[알고리즘] 리트코드 19. 리스트 끝에서 N번째 노드 제거 c++ // 노드탐색 (0) | 2024.07.02 |
---|---|
리트코드 2. 두개의숫자추가 c++ // stoi 주의점, 노드 begin 저장방법, 두 링크드리스트 덧셈방법 (0) | 2024.06.20 |
프로그래머스 표편집 c++ // 연결리스트 직접구현 하는방법, 삽입삭제 되돌리기는 연결리스트(직접구현)! (0) | 2023.11.23 |
백준 1158 cpp // 연결리스트 풀이, int_to_string(int), List.erase() 주의사항 (0) | 2023.08.16 |
백준 1406 cpp // 연결리스트 사용법 (0) | 2023.08.14 |