문제 출처 : BOJ 1406 - 에디터 www.acmicpc.net/problem/1406
한 줄로 된 간단한 에디터를 구현하는 문제이다.
예전에 자료구조를 처음 배웠을 때 스택을 이용해서 푼 적이 있는데,
이번에는 STL Container 중 하나인 list를 이용해서 풀어보았다.
최종 코드
#include <iostream>
#include <list>
using namespace std;
int main() {
string editor;
cin >> editor;
list<char> L;
for (auto c : editor) L.push_back(c);
auto cursor = L.end();
int q;
cin >> q;
while (q--) {
char op;
cin >> op;
if (op == 'P') {
char n;
cin >> n;
L.insert(cursor, n);
}
else if (op == 'L') {
if (cursor != L.begin())
cursor--;
}
else if (op == 'D') {
if (cursor != L.end())
cursor++;
}
else { // 'B'
if (cursor != L.begin())
L.erase((--cursor)++);
}
}
for (auto c : L) cout << c;
cout << '\n';
return 0;
}
char형 list인 L을 선언해주고,string editor에 입력받은 문자들을 L에 순서대로 삽입해준다.명령어 개수만큼 while문을 반복하면서 명령어에 따라 조건문을 수행한다.
가장 애먹었던 부분은 op가 'B'일 때인데,
L.erase(--cursor)라고 했다가 자꾸 오류가 나길래
뭐가 문제인지 계속 생각하면서 로메인 샐러드를 먹다가,
갑자기 내가 뭘 잘못했는지 떠올랐다!
L.erase(--cursor)라고 하면 cursor가 갈 곳을 잃어서,
그 다음 위치를 가르켜주도록 ++를 해주어야 했다.
list를 이용하면 cursor만 옮겨주면 되어서,
stack을 이용했을 때보다 훨씬 간단하게 해결할 수 있었다.
'BOJ' 카테고리의 다른 글
(C++) BOJ/백준 1158 - 요세푸스 문제 (0) | 2021.05.09 |
---|---|
(C++) BOJ/백준 1405 - 미친 로봇 (0) | 2021.05.09 |
(C++) BOJ/백준 10984 - 내 학점을 구해줘 (0) | 2021.04.06 |
(C++) BOJ/백준 5565 - 영수증 (0) | 2021.04.06 |
(C++) BOJ/백준 11650 - 좌표 정렬하기 (0) | 2021.04.05 |