-
[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