[210316][백준/BOJ] 1406번 에디터

KeonWoo Kim·2021년 3월 16일
0

알고리즘

목록 보기
19/84

문제

입출력


풀이

STL list로 문제를 해결할 수 있다.

list::iterator t으로 커서의 위치를 문자열의 맨 끝으로 받은다음에
P는 입력할 문자를 입력받는 것이므로 insert
L은 커서를 왼쪽으로 한 칸 옮기는 것이므로 t--
D는 커서를 오른쪽으로 한 칸 옮기는 것이므로 t++
B는 커서 왼쪽에 있는 문자를 삭제하는것이므로 t--으로 커서를 한칸 옮긴 다음에 t=L.erase(t) 으로 문자를 삭제하였다.

코드

#include <bits/stdc++.h>
using namespace std;

char str[100000];

int main(void) {
    list<char> L;
    int n;
    
    scanf("%s", &str);
    for(int i=0;str[i]!='\0';++i)
        L.push_back(str[i]);
    list<char>::iterator t = L.end();
    scanf("%d", &n);
    
    for (int i = 0; i < n; ++i)
    {
        char a, b;
        cin >> a;
        if (a == 'P')
        {
            cin >> b;
            L.insert(t, b);
        }
        else if (a == 'L')
        {
            if (t != L.begin())t--;
        }
        else if (a == 'D')
        {
            if (t != L.end())t++;
        }
        else if (a == 'B')
        {
            if (t != L.begin())
            {
                t--;
                t = L.erase(t);
            }
        }
    }

    for (auto& e : L)
        cout << e;
}

느낀점

STL list를 처음 사용해보았다. 그동안 알고있던 연결리스트는 node를 사용해서 문제를 푸는것이여서 되게 어렵게 느껴졌는데 list를 사용하니 쉽게 문제를 해결할 수 있었던거 같다.

profile
안녕하세요

0개의 댓글

관련 채용 정보