백준/구현

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

배발자 2022. 1. 17.
반응형

처음에 작성했던 코드이다. 

#include <iostream>
#include <string>
using namespace std; 
string s1, s2, result; 
int main() {
	cin >> s1 >> s2; 
	int pos=0; 
	for (auto c : s1) {
		result += c; 
		if ((pos=result.find(s2))!=string::npos) {
			result.erase(result.begin()+pos, result.end()); 
		}
	}
	if (result.size())cout << result;
	else cout << "FRULA"; 
	return 0; 
	cout << result; 

}

해당 코드에서 find함수를 계속해서 호출하였기 때문에 시간초과가 발생하였다.

그렇기 때문에 입력받은 문자열을 char형으로 하나씩 새로운 string에 더해가면서 

폭발 문자열을 비교하여 해당되면 그 문자열에 해당하는 데이터를 erase 하면 된다. 

즉, 0번 인덱스부터 입력받은 최초 문자열의 사이즈만큼만 for문을 돌린다면 이 문제를 해결할 수 있다. 

#include <iostream>
#include <string>
using namespace std;
string s1, s2, result;
int main() {
	cin >> s1 >> s2;
	for (int i = 0; i < s1.size(); i++) {
		result += s1[i];
		if (result.size() >= s2.size()) {
			if (result.substr(result.size() - s2.size(), s2.size()) == s2) {
				result.erase(result.end() - s2.size(), result.end());
			}
		}
	}
	if (result.size())cout << result;
	else cout << "FRULA";
}

 

 

9935번: 문자열 폭발

첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모

www.acmicpc.net

 

반응형

댓글