[백준] 골4 - 문자열 폭발

9935번: 문자열 폭발

문제 설명

문자열이 주어지고 부분 문자열이 주어진다. 문자열에 있는 부분 문자열을 제거하고 이어붙인다. 이 과정을 반복하여 최종적으로 나오는 문자열을 출력한다.

풀이

문자열의 왼쪽부터 오른쪽까지 순환한다. 각각의 해당하는 문자를 벡터에 넣는다.

벡터가 부분 문자열 사이즈보다 크거나 같을때 벡터의 끝에서부터 부분 문자열이 있는지 체크해서 부분 문자열이 있으면 제거한다.

최종적으로 벡터를 출력한다.

코드

/* 
참고
<https://cocoon1787.tistory.com/720>
*/
#include <bits/stdc++.h>
using namespace std;

string a;
string b;
int a_len;
int b_len;
vector<char> v;

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	cin >> a;
	cin >> b;
	a_len = a.length();
	b_len = b.length();

	for (int i = 0; i < a_len; i++)
	{
		v.push_back(a[i]);

		if (v.size() >= b_len)
		{
			int v_len = v.size();

			bool flag = true;
			for (int j = 0; j < b_len; j++)
			{
				if (v[v_len - 1 - j] != b[b_len - 1 - j])
				{
					flag = false;
					break;
				}
			}

			if (flag)
			{
				for (int j = 0; j < b_len; j++)
					v.pop_back();
			}
		}
	}

	if (v.empty())
		cout << "FRULA";
	else
	{
		for (auto& e : v)
		{
			cout << e;
		}
	}
	return 0;
}

소감

벡터 = 스택 그러나 스택은 Top만 참조할 수 있으나, 벡터는 모든 요소를 참조할 수 있음

참조

[C++] 백준 9935번 - 문자열 폭발