[C++] 백준 1406: 에디터

Cyan·2024년 1월 27일
0

코딩 테스트

목록 보기
30/166

백준 1406: 에디터

문제 요약

초기에 편집기에 입력되어 있는 문자열이 주어지고, 그 이후 입력한 명령어가 차례로 주어졌을 때, 모든 명령어를 수행하고 난 후 편집기에 입력되어 있는 문자열을 구하는 프로그램을 작성하시오. 단, 명령어가 수행되기 전에 커서는 문장의 맨 뒤에 위치하고 있다고 한다.

문제 분류

  • 자료 구조
  • 스택
  • 연결 리스트

문제 풀이

우선 string s로 입력 받고 각 문자들을 listpush_back()해주었다.

그 후 반복자(iterator)를 이용하여, 각 연산들은 반복자를 통해 해결하였다.

삭제는 반복자가 가리키는 곳의 왼쪽 값을 삭제하였고,

삽입은 삽입 후 반복자를 1만큼 더해주어 오른쪽으로 옮겨주었다.

마지막에는 리스트의 모든 문자를 출력하였다.

풀이 코드

#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <list>

using namespace std;

int main()
{
	list<char> l;
	string s;
	int m;
	char in1, in2;
	cin >> s;

	int size = s.length();
	for (int i = 0; i < size; i++)
		l.push_back(s[i]);

	auto it = l.end();
	cin >> m;
	while (m--) {
		cin >> in1;
		if (in1 == 'P') {
			cin >> in2;
			it = l.insert(it, in2);
			it++;
		}
		else if (in1 == 'L') {
			if (it != l.begin()) it--;
		}
		else if (in1 == 'D') {
			if (it != l.end()) it++;
		}
		else if (in1 == 'B') {
			if (it != l.begin()) {
				it--;
				it = l.erase(it);
			}
		}
	}
	for (auto& x : l)
		cout << x;

	return 0;
}

0개의 댓글