728x90
반응형
1406번 에디터
문제 풀이
#include <bits/stdc++.h>
#include <list>
using namespace std;
void fast_io(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
}
int main(void)
{
fast_io();
string str;
list<char> l;
cin >> str;
for (int i = 0; i < str.length(); i++)
{
l.push_back(str[i]);
}
list<char>::iterator iter = l.end();
int m;
cin >> m;
while (m--)
{
char order;
cin >> order; //abcd
if (order == 'L')
{
if (iter != l.begin())
iter--;
}
else if (order == 'D')
{
if (iter != l.end())
iter++;
}
else if (order == 'B')
{
if (iter != l.begin())
iter = l.erase(--iter);
}
else if (order == 'P')
{
char c;
cin >> c;
l.insert(iter, c);
}
}
for (char c : l)
{
cout << c;
}
}
B인 경우의 if 문에서c l.erase(--iter);
으로 제출 했다가 런타임에러로 틀렸다.
이유를 찾아보니 iter로 원소를 삭제해버렸기때문에 iter는 위치를 모르게된다.
따라서iter = l.erase(--iter);
으로 반환값을 넣어주면 삭제한 다음을 가리키는 iter를 반환하기 때문에 해결.
728x90
반응형
'자라는 개발자 > 문제풀이' 카테고리의 다른 글
백준 c++ 5397 키로거 (0) | 2022.01.14 |
---|---|
백준 c++ 1380 귀걸이 (0) | 2022.01.14 |
백준 c++ 1919 애너그램 만들기 (1) | 2022.01.12 |
백준 c++ 3273번 두 수의 합 (0) | 2022.01.11 |
백준 c++ 1475번 방 번호 (0) | 2022.01.10 |