키로커
문제 링크: https://www.acmicpc.net/problem/5397
list와 그 반복자를 이용하여 문제를 해결했다.
방향키 조절은 iterator의 --,++ 연산으로 수행했고,
백스페이스 연산은 iter가 가지고 있는 원소 이전의 데이터를 제거해야 하므로 이전 데이터를 제거하고 다음의 데이터를 가져온다.
-
정답 코드
#include<iostream> #include<string> #include<list> using namespace std; list<char> li; list<char>::iterator iter = li.begin(); void goLeft() { if (!li.empty() && iter != li.begin()) --iter; } void goRight() { if (!li.empty() && iter != li.end()) ++iter; } void remove() { } int main() { int n; cin >> n; while (n--) { li.clear(); iter = li.begin(); string str; cin >> str; for (int i = 0; i < str.size(); i++) { char c = str.at(i); if (c == '<') { goLeft(); } else if (c == '>') { goRight(); } else if (c == '-') { if (!li.empty()) { if (iter == li.end()) li.pop_back(); else if (iter == li.begin()) continue; else { goLeft(); iter = li.erase(iter); } } } else { if (li.empty()) { li.push_front(c); iter = li.end(); } else li.insert(iter, c); } } if(!li.empty()) for (iter = li.begin(); iter != li.end(); ++iter) cout << *iter; cout << endl; } return 0; }
'ProblemSolving' 카테고리의 다른 글
[BOJ] 10546_배부른 마라토너 (0) | 2021.02.06 |
---|---|
[BOJ] 7785_회사에 있는 사람 (0) | 2021.02.05 |
[BOJ] 3085_사탕게임 (4) | 2021.02.03 |
[BOJ] 1074_Z (0) | 2021.02.02 |
[BOJ] 1309_동물원 (0) | 2021.02.01 |
최근댓글