ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [BOJ]1406 :: 에디터
    알고리즘/BOJ(C++) 2018. 6. 16. 20:01
    반응형

    https://www.acmicpc.net/problem/1406


    자료구조 연습하기 좋은문제!!


    문제 설명은 생략하고 


    커서를 기준으로 왼쪽 문자열을 저장하고 오른쪽 문자열을 저장하는게 핵심이다!


    왼쪽 오른쪽 모두 앞뒤로 push pop이 편리해야 하므로 deque 자료구조를 사용합니다..


    L : 왼쪽 deque의 back을 오른쪽 deque의 맨 앞으로 (empty일 경우 예외처리)

    D : 오른쪽 deque의 front을 왼쪽 deque의 맨 뒤로 (empty일 경우 예외처리)

    B : 왼족 deque의 back을 삭제하기(pop_back())

    P : 왼쪽 deque의 back에 추가!


    #include <iostream>
    #include <queue>
    #include <string>
    using namespace std;
    deque<char> l;//커서 왼쪽 문자들을 보관
    deque<char> r;//커서 오른쪽 문자들 보관
    int main()
    {
    std::ios::sync_with_stdio(false);
    cin.tie(NULL);
    string initial;
    cin >> initial;
    int len = initial.length();
    for (int i = 0; i < len; i++)
    {
    l.push_back(initial[i]);
    }//처음 입력받은 문자들 모두 왼쪽에 넣기
    int n;//명령어 개수
    cin >> n;
    while (n--)
    {
    char cmd;
    cin >> cmd;
    if (cmd == 'L')
    {
    if (!l.empty())
    {
    char temp = l.back();
    l.pop_back();
    r.push_front(temp);
    }
    }
    else if (cmd == 'D')
    {
    if (!r.empty())
    {
    char temp = r.front();
    r.pop_front();
    l.push_back(temp);
    }
    }
    else if (cmd == 'B')
    {
    if (!l.empty())
    {
    l.pop_back();
    }
    }
    else if (cmd == 'P')
    {
    char input;
    cin >> input;
    l.push_back(input);
    }
    }
    while (!l.empty())
    {
    cout << l.front();
    l.pop_front();
    }
    while (!r.empty())
    {
    cout << r.front();
    r.pop_front();
    }
    }


    반응형

    '알고리즘 > BOJ(C++)' 카테고리의 다른 글

    [BOJ] 2225 :: 합분해  (0) 2018.06.16
    [BOJ] 1699 :: 제곱수의 합  (0) 2018.06.16
    [BOJ] 6679 :: 싱기한 네자리 숫자  (0) 2018.06.02
    [BOJ] 8958 :: OX퀴즈  (0) 2018.06.02
    [BOJ] 2581 :: 소수  (0) 2018.06.01

    댓글

Designed by Tistory.