본문 바로가기
알고리즘/백준

[백준/C,C++] 1406번: 에디터

by 이민훈 2021. 4. 21.

www.acmicpc.net/problem/1406

 

1406번: 에디터

첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수

www.acmicpc.net

풀이

리스트를 통해 구현할 수 있는 문제입니다.

 

처음에 단순히 string 배열을 통해 구현했었는데

 

문자열이 복사되는 과정에서 시간을 많이 잡아먹어 시간 초과가 났었습니다.

 

#include<iostream>
#include<list>

using namespace std;

int main(void)
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    string s;
    int m;
    cin >> s >> m;

    list<char> editor(s.begin(), s.end());
    auto cursor = editor.end();

    for (int i = 0; i < m; i++) {
        char c; cin >> c;
        if (c == 'L' && cursor != editor.begin()) cursor--;
        if (c == 'D' && cursor != editor.end()) cursor++;
        if (c == 'B' && cursor != editor.begin()) cursor = editor.erase(--cursor);
        if (c == 'P') {
            char x; cin >> x;
            editor.insert(cursor, x);
        }
    }

    for (const auto& i : editor) cout << i;

    return 0;
}

반례

Input

yyy
10
B
B
L
D
P y
P y
P y
B
L
D
Output

yyy

 

Input

abcdefg
15
B
L
B
B
P z
P x
B
L
D
P y
L
D
B
P p
B

Output

abczf

댓글