자라는 개발자/문제풀이

백준 c++ 1406번 에디터

자란다 2022. 1. 14. 01:07
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