[문제]
9935번: 문자열 폭발 (acmicpc.net)
9935번: 문자열 폭발
첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모
www.acmicpc.net
[문제 풀이]
문자열에 대해서 배울 수 있는 좋은 문제이다.
나는 빈 string을 하나 더 만들고 해당 문자열에 스택을 사용하듯이 계속 쌓아뒀다. 그러다가 만일 해당 문자열이 bomb와 같다면 해당 문자열 만큼을 새로 만든 문자열에서 지우는 형식으로 진행하였다.
* find를 쓸려다가 문자열의 길이가 1,000,000 라서 시간 복잡도에 걸린다고 생각하여서 쓰지 않았다.
* string 에서 erase 함수와 substr 함수에 대해서 익혀두자. 코딩 테스트에서 문자열을 자르거나 할 때 굉장히 유용하게 쓰일 수 있다.
[코드]
#include <iostream>
#include <algorithm>
#include <vector>
#include <stack>
#include <string>
using namespace std;
int main(){
string s;
cin>>s;
string bomb;
cin>>bomb;
string s3;
for(int i = 0;i<s.size();i++){
s3.push_back(s[i]);
if(s3.back() == bomb.back()){
if(s3.size() >= bomb.size()){
if(s3.substr(s3.size() - bomb.size(), bomb.size()) == bomb){
s3.erase(s3.size() - bomb.size(),bomb.size());
}
}
}
}
if(s3.size() <= 0){
cout<<"FRULA"<<endl;
}
else{
cout<<s3<<endl;
}
return 0;
}