9935번: 문자열 폭발
첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모
www.acmicpc.net
[난이도] Gold4
[유형] 스택
[풀이]
A를 전체 문자열 B를 폭발 문자열이라고 했을 때
A를 i: 0~N-1까지 순회하면서 i와 A[i]의 B에서의 index를 스택에 저장
방식으로 답을 구한다.
#include <stack> #include <iostream> #include <string> using namespace std; bool erase[1000001]; string a,b; stack<pair<int,int>> s; int main(){ cin >> a >> b; if(b.size()==1){ for(int i=0;i<a.size();i++) if(a[i]==b[0]) erase[i] = 1; }else{ for(int i=0;i<a.size();i++){ if(!s.empty() && b[s.top().second+1]==a[i]){ s.push({i,s.top().second+1}); if(s.top().second==b.size()-1) { int sz = b.size(); while(sz--) { erase[s.top().first] = 1; s.pop(); } } } else if(a[i]==b[0]) s.push({i,0}); else while(!s.empty()) s.pop(); } } string ret; for(int i=0;i<a.size();i++) if(!erase[i]) ret += a[i]; if(ret=="") puts("FRULA"); else cout << ret; }
github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold4/9935.cpp
'Problem-Solving > BOJ' 카테고리의 다른 글
[BOJ/백준][Gold2] 4991 : 로봇 청소기 (C++) (1) | 2020.12.13 |
---|---|
[BOJ/백준][Gold2] 1007 : 벡터 매칭 (C++) (0) | 2020.12.13 |
[BOJ/백준][Gold4] 8983 : 사냥꾼(C++) (0) | 2020.12.13 |
[BOJ/백준][Gold4] 6497: 전력난 (C++) (0) | 2020.12.13 |
[BOJ/백준][Gold4] 6087 : 레이저 통신 (C++) (0) | 2020.12.13 |