BOJ

(C++) BOJ/백준 1406 - 에디터

정영주 2021. 5. 9. 14:09

문제 출처 : BOJ 1406 - 에디터 www.acmicpc.net/problem/1406

 

한 줄로 된 간단한 에디터를 구현하는 문제이다.

예전에 자료구조를 처음 배웠을 때 스택을 이용해서 푼 적이 있는데,

이번에는 STL Container 중 하나인 list를 이용해서 풀어보았다.

 

최종 코드

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

int main() {
	string editor;
	cin >> editor;
	list<char> L;

	for (auto c : editor) L.push_back(c);
	auto cursor = L.end();
	int q;
	cin >> q;

	while (q--) {
		char op;
		cin >> op;
		if (op == 'P') {
			char n;
			cin >> n;
			L.insert(cursor, n);
		}
		else if (op == 'L') {
			if (cursor != L.begin())
				cursor--;
		}
		else if (op == 'D') {
			if (cursor != L.end())
				cursor++;
		}
		else { // 'B'
			if (cursor != L.begin())
				L.erase((--cursor)++);
		}
	}
	for (auto c : L) cout << c;
	cout << '\n';

	return 0;
}

char형 list인 L을 선언해주고,string editor에 입력받은 문자들을 L에 순서대로 삽입해준다.명령어 개수만큼 while문을 반복하면서 명령어에 따라 조건문을 수행한다.

 

가장 애먹었던 부분은 op가 'B'일 때인데,

L.erase(--cursor)라고 했다가 자꾸 오류가 나길래

뭐가 문제인지 계속 생각하면서 로메인 샐러드를 먹다가,

갑자기 내가 뭘 잘못했는지 떠올랐다!

 

L.erase(--cursor)라고 하면 cursor가 갈 곳을 잃어서,

그 다음 위치를 가르켜주도록 ++를 해주어야 했다.

 

list를 이용하면 cursor만 옮겨주면 되어서,

stack을 이용했을 때보다 훨씬 간단하게 해결할 수 있었다.