1. 문제 해결 전략
링크드 리스트를 이용해서 풀면 쉽게 해결할 수 있다.
전반적으로 리스트라는 자료구조와 반복자의 사용에 능숙하면 풀수있는 문제였다.
#include<iostream>
#include<string>
#include<list>
using namespace std;
int main() {
int n;
string s; //초기 입력 문자열
cin >> s; //abcd
cin >> n;
list<char> editor(s.begin(), s.end()); // 문자열을 리스트로
auto cursor = editor.end(); // 초기 커서의 위치는 문장의 맨 뒤
while (n--) {// 명령의 수 만큼 반복
char cmd;
cin >> cmd; //명령어 입력
if (cmd == 'L') {
if (cursor != editor.begin()) {
cursor--;
}
}
else if (cmd == 'D') {
if (cursor != editor.end()) {
cursor++;
}
}
else if (cmd == 'B') {
if (cursor != editor.begin()) {
cursor--;
cursor = editor.erase(cursor);
}
}
else if (cmd == 'P') {
char x;
cin >> x;
editor.insert(cursor, x);
}
}
for (auto &x : editor) {
cout << x;
}
return 0;
}
2. 걸린 시간
실패
3. 느낀점
자료구조를 그저 읽고 쓰고, 반복자를 이용해서도 리스트의 원소 접근 용도로만 사용하다가 이런 문제를 만나니 골치 아팠다.. 어떻게 풀어야하는지 감은 잡았고 리스트를 사용해야 한다는 것도 알았지만 결국 해결하지 못했다.
문제는 iter의 제거인데, iterator의 후위감소연산 이후에 erase를 해야한다는 점과 erase를 하고나서 다시 iterator가 가리키도록 대입해주어야 한다는 점은 몰랐었다. (4년전에 이런식으로 써본거 같은데.. 안쓰니까 기억이 안났다.)
느낀점은.. stl을 다시 제대로 공부해야겠다는 것.
4. 링크
https://www.acmicpc.net/problem/1406
'알고리즘 > 백준 알고리즘' 카테고리의 다른 글
[리스트] 1168. 요세푸스 문제 2 (0) | 2020.05.01 |
---|---|
[링크드리스트] 1158. 요세푸스 문제 (0) | 2020.04.30 |
[x] 10824 : 네 수 (0) | 2020.04.30 |
[스택] 9012. 괄호 (0) | 2020.04.28 |
[스택] 10828. 스택 (0) | 2020.04.28 |