백준 1406번 std::list

김동현·2022년 6월 21일
0
#include <list> // std::list를 쓰기 위한 헤더
#include <iostream>
#include <string>

using namespace std;

int main()
{
	// 입출력 속도를 향상시킨다.
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
    
	std::list<char> list;		
	std::list<char>::iterator iter;

	string a;
	cin >> a;

	// std::list<char> list (a.begin(), a.end()); // 아래의 반복문과 같은 역활을 한다.

	for (int i = 0; i < a.length(); ++i)
	{
		list.push_back(a[i]);
	}
	
	iter = list.end();

	int counts;
	cin >> counts;

	for (int i = 0; i < counts; ++i)
	{
		char b;
		cin >> b;
		switch (b)
		{
		case 'L': // 커서를 왼쪽으로 한칸 옮김
			if (iter != list.begin())
			{
				--iter;
			}
			break;

		case 'D': // 커서를 오른쪽으로 한칸 옮김
			if (iter != list.end())
			{
				++iter;
			}
			break;

		case 'B': // 커서 왼쪽에 있는 문자를 삭제함
			if (iter != list.begin())
			{
				iter = list.erase(--iter);
			}
			break;

		case 'P': // $라는 문자를 커서왼쪽에 추가함
			char input;
			cin >> input;

			list.insert(iter, input);
			break;
		}
	}

	for (iter = list.begin(); iter != list.end(); ++iter)
	{
		cout << *iter;
	}
	
}

입력한 string 문자열을 list에 담을 생각도 하지 못했다.

std::list<char> list (a.begin(), a.end()); 

을 해주면 list에 a문자열의 시작부터 끝까지를 넣는거다.

iterator를 포인터처럼 사용한다고 생각하면 조금 편할 것 같다.
물론 iterator는 포인터가 아니긴하다.

iter = list.erase(--iter)는 erase의 반환 타입이 iterator 이기에 iter에 담아주어야 한다.

profile
해보자요

0개의 댓글