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

2020. 8. 16. 08:33알고리즘 문제풀이

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

 

1406번: 에디터

문제 한 줄로 된 간단한 에디터를 구현하려고 한다. 이 편집기는 영어 소문자만을 기록할 수 있는 편집기로, 최대 600,000글자까지 입력할 수 있다. 이 편집기에는 '커서'라는 것이 있는데, 커서는

www.acmicpc.net

list와 iterator를 통해 구현을 했다.

 

코드

#include <iostream>
#include <string>
#include <list>
using namespace std;

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

	string input;
	int m;
	list<char> editor; //리스트로 구현하였다
	list<char>::iterator it;
	char order, order_input;

	cin >> input;

	//입력받은 문자열을 문자별로 리스트에 넣는다
	for (int i = 0; i < input.size(); i++) 
		editor.push_back(input[i]);
	
	//명령어가 수행되기전 커서는 문장의 맨 뒤에 위치하므로
	it = editor.end();

	cin >> m;

	for (int i = 0; i < m; i++)
	{
		cin >> order;

		if (order == 'L')
		{
			if (it != editor.begin())
				it--;
		}

		else if (order == 'D')
		{
			if (it != editor.end())
				it++;
		}

		else if (order == 'B')
		{
			if (it != editor.begin())
			{
				it--;
				it = editor.erase(it); //erase는 삭제한 것의 다음것을 가르키는것을 반환
			}
		}

		else if (order == 'P')
		{
			cin >> order_input;

			editor.insert(it, order_input);
		}
	}

	//출력
	for (it = editor.begin(); it != editor.end(); it++)
		cout << (*it);

	return 0;
}