CafeM0ca

[BOJ]키로거 본문

Programming/백준

[BOJ]키로거

M0ca 2017. 12. 18. 14:11
반응형


친구에게 도움을 많이 받았다. 3일걸렸는데 1일차에는 링크드리스트 직접구현해서 써먹을려다 실패. 2일차에는 std list 사용법 익히다가 erase부분에서 조건 몰라서 실패 3일차에 erase부분 도움받았다. 



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include<iostream>
#include<list>
#include<string>
using namespace std;
int main(void)
{
    int L; //줄 수
    string s;
    cin >> L;
    while(L>0){
        list<char> keyloger; //keyloger 리스트 생성 
        list<char>::iterator insert_pos = keyloger.begin(); //insert_pos라는 리스트의 iterator 
        cin >> s;
            for(int i=0;i<s.length();i++){ //문자열 크기만큼
                switch(s.at(i)){ //문자열의 인덱스마다
                    case '<':
                        if(insert_pos != keyloger.begin()) //첫번째 컨테이너 전인 begin에 커서위치가 아니면
                            insert_pos--;
                        break;
                    case '>':
                        if(insert_pos != keyloger.end()) //마지막 컨테이너 후인 end에 커서위치가 아니면
                            insert_pos++;
                        break;
                    case '-':
                        if(keyloger.size() > 0)
                            if(insert_pos != keyloger.begin()) //begin의 위치가 아니면
                                insert_pos = keyloger.erase(--insert_pos); //지우기
                        break;
                    default:
                        keyloger.insert(insert_pos,s.at(i)); //삽입
                }
            }
        for(auto b : keyloger) //keyloger를 탐색하며 출력
            cout << b;
        cout << '\n';
        L--;
    }
    return 0;
}
cs

처음에는 연결리스트 구현하려 했었는데 노드 이어주는 부분에서 문제(?)가 생겨서 stl로 풀었다. stl 정말 편한데 iterator(반복자)에 대해 더 공부할 필요가 있음을 느꼈다. '연결리스트와 같은 자료구조는 어디다 써먹을까?' 라는 질문에는 이러한 문제가 답변하고 있으니 자료구조도 더 공부할 필요를 느꼈다.

반응형
Comments