Linked List
문제 : 백준 5397-키로거
생각한 구현 내용
- 입력받은 케이스 만큼 반복하여 비밀번호를 추측한다.
- 리스트를 이용하여 현재 커서위치에 따른 입력을 수행한다.
잊어버린 점
- cursor의 위치를 확인할때 int idx의 관리가 아닌 list의 iterator로 관리한다.
- 좌, 우로 갈때 더 이상 가지 못하는 것은 list의 begin과 end를 기준으로 확인한다.
- list의 중간에서 문자열을 지워야할 경우 현재 cursor에서 한칸을 뺀 후에 erase한다.
구현 코드
#include <bits/stdc++.h>
using namespace std;
int main(void) {
// 입출력 분리해서 빠르게 동작하도록
ios::sync_with_stdio(0);
cin.tie(0);
int N = 0;
cin >> N;
vector<string> result;
while (N > 0) {
string input;
cin >> input;
list<char> L;
auto cursor = L.end();
for (const auto &chr : input) {
if (chr == '<') {
if (cursor != L.begin())
cursor--;
} else if (chr == '>') {
if (cursor != L.end())
cursor++;
} else if (chr == '-') {
if (cursor != L.begin()) {
cursor--;
cursor = L.erase(cursor);
}
} else {
L.insert(cursor, chr);
}
}
string str_L;
for (const auto chr : L) {
str_L += chr;
}
result.emplace_back(str_L);
N--;
}
for (const auto str_result : result) {
cout << str_result << endl;
}
return 0;
}