문제
"맞았습니다"코드
#include <bits/stdc++.h>
using namespace std;
int tc; // 테스트케이스
string inputStr; // 입력받은 키로거 문자열
list<char> L;
list<char> ::iterator cur;
void input(){
cin >> tc; // 테스트케이스 횟수
while(tc--){
cin >> inputStr; // 문자열 입력받기
L.clear(); // list 초기화
cur = L.begin(); // 빈 리스트의 시작점에 커서를 둔다.
for(int i = 0; i < inputStr.length(); i++){
if(inputStr[i] == '<'){ // 커서를 왼쪽으로
if(cur != L.begin()){
cur--;
}
}
else if(inputStr[i] == '>'){ // 커서를 오른쪽으로
if(cur != L.end()){
cur++;
}
}
else if(inputStr[i] == '-'){ // 백스페이스
if(cur != L.begin()){
cur = L.erase(--cur); // 커서를 앞으로 당긴 후, 삭제.
}
}
else {
L.insert(cur, inputStr[i]);
}
} // for
// 출력
for(cur = L.begin(); cur != L.end(); cur++){
cout << *cur;
}
cout << '\n';
} // while
}
int main(void) {
ios_base::sync_with_stdio(0);
cin.ignore(0);
input();
return 0;
}
리뷰
키로거 문자열을 입력받고, 문자열을 순회하면서 list에 문자을 삽입한다.
커서도 list에서 움직이게 했다. 빈 리스트의 시작점에 커서를 뒀다.
백스페이스 처리할 때, 커서를 앞으로 당긴 후에 erase()를 해야 되는 것을 유념하자.
728x90
'알고리즘 > 백준' 카테고리의 다른 글
큐2 백준 18258번 c++ (0) | 2021.11.24 |
---|---|
요세푸스 문제 list, queue로 풀어본 백준 1158번 c++ (0) | 2021.11.24 |
에디터 list, queue로 2가지로 풀어본 코드 백준 1406번 c++ (0) | 2021.11.22 |
strfry 백준 11328 c++ (0) | 2021.11.22 |
두 수의 합 백준 3273번 c++ (0) | 2021.11.22 |