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 |