새소식

코딩테스트/백준_골드

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

  • -

[문제]

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; }

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.