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(반복자)에 대해 더 공부할 필요가 있음을 느꼈다. '연결리스트와 같은 자료구조는 어디다 써먹을까?' 라는 질문에는 이러한 문제가 답변하고 있으니 자료구조도 더 공부할 필요를 느꼈다.
반응형