반응형
처음에 작성했던 코드이다.
#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";
}
반응형
'백준 > 구현' 카테고리의 다른 글
[백준 9375번 / C++] 패션왕 (0) | 2022.01.18 |
---|---|
[백준 14469번 / C++] 소가 길을 건너간 이유 3 (0) | 2022.01.17 |
[백준 2979번 / C++] 트럭 주차 (0) | 2022.01.17 |
[백준 10808번 / C++] 알파벳 개수 (0) | 2022.01.17 |
[백준 2309번/ C++] 일곱 난쟁이 (0) | 2022.01.17 |
댓글