[23018][伯俊/BOJ]5397番キーホルダー


質問する



にゅうしゅつりょく



に答える


STLリストで問題を解く.
1)<の場合、カーソルが一番前でない場合は、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を使用すると、この問題がよく見られます.
これからは気をつけてね