본문 바로가기

Algorithm/배열과 연결리스트

백준 에디터(1406) C++ 풀이

알고리즘 분류

자료 구조

스택

연결 리스트

문제 해결 아이디어

list와 iterator를 이용하여 list의 기능을 통해 문제를 해결하면 된다.

list정리:https://khjtoy.tistory.com/17

 

초보자를 위한 STL list 정리

1)list란 무엇인가 1-1.list의 존재 이유 초보자를 위한 C++ STL forward_list 정리 1)forward_list 사용 이유 앞서 살펴본 STL array, vector같은 연속된 자료 구조에서는 데이터 중간에 자료를 추가하거나 삭제하

khjtoy.tistory.com

iterator(반복자):https://khjtoy.tistory.com/16

 

초보자를 위한 c++ STL 반복자(iterator) 정리

1)반복자란 무엇인가 앞서 array, vector, forward_list를 설명할 때 반복자(iterator)를 사용한 것을 기억하실 것입니다. 초보자를 위한 c++ STL array 정리 목차 ·array 사용 이유 ·array 사용 방법 ·array 초기화

khjtoy.tistory.com

코드

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

int main()
{
	string s;
	int num;
	char insertNum;

	cin >> s;
	cin >> num;

	list<char> l(s.begin(), s.end());
	list<char>::iterator it = l.end();

	for (int i = 0; i < num; i++)
	{
		cin >> s;
		if (s == "L")
		{
			if(it != l.begin())
				it--;
		}
		else if (s == "D")
		{
			if(it != l.end())
				it++;
		}
		else if (s == "B")
		{
			if (it != l.begin())
			{
				l.erase(prev(it));
			}
		}
		else if (s == "P")
		{
			cin >> insertNum;
			l.insert(it, insertNum);
		}
	}

	for (char m : l)
	{
		cout << m;
	}
}

코드설명

iterator(반복자)를 처음에 문자열 마지막에 넣고, L을 입력받으면 순회를 왼쪽으로,
R을 입력받으면 순회를 오른쪽으로, B을 입력받으면 prev()함수(전에 있던 것을 가져옴)를 통해 지우면 된다.

P는 iterator 위치에 입력한 숫자를 넣으면 문제를 해결 할 수 있다.