문제

키로거 백준 5397

"맞았습니다"코드

#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

+ Recent posts