[210318][백준/BOJ] 5397번 키로거

문제

입출력


풀이

STL list로 문제를 풀었다.

1) '<' 일때는 커서가 맨 앞이 아닌 경우에 왼쪽으로 한칸 이동
2) '>' 일때는 커서가 맨 뒤가 아닌 경우에 오른쪽으로 한칸 이동
3) '-' 일때는 커서가 맨 앞이 아닌 경우에 커서 왼쪽에 있는 글자를 지움. 커서가 가르키는 글자를 지우는게 아니므로 커서를 왼쪽으로 한칸 보내고 글자를 지움

코드

#include <bits/stdc++.h>
using namespace std;

int main()
{
	int n;
	scanf("%d", &n);
	while(n--)
	{
		string str;
		cin >> str;
		list<char> L;
		list<char>::iterator t = L.end();

		for(auto e:str)
		{
			if (e == '<')
			{
				if (t != L.begin())
					t--;
			}
			else if (e == '>')
			{
				if (t != L.end())
					t++;
			}
			else if (e == '-')
			{
				if (t != L.begin())
				{
					t--;
					t = L.erase(t);
				}
			}
			else
				L.insert(t, e);
		}
		for (auto e:L)
			cout << e;
		cout << '\n';
		L.clear();
	}
}

느낀점

STL, string, auto는 c++의 기능이므로 c스타일의 문법으로 접근해서는 안된다.
실행속도를 위해 cin/cout 대신에 scanf/printf를 쓰다보니 이 문제를 자주 보게 된다.
앞으로 더 조심하도록 하자

좋은 웹페이지 즐겨찾기