728x90
https://www.acmicpc.net/problem/12904
문자열 T에 대해 T가 empty되지 않을 때 까지 맨 뒤부터 탐색을 진행한다.
A를 만났다면 그냥 A를 지워주고, B를 만났다면 문자열을 뒤집은 뒤 맨 앞을 지워준다. (B를 추가할 때 문자열을 뒤집고 나서 맨 뒤에 B를 추가하기 때문에, 원래 상태로 돌아가려면 문자열을 뒤집고 그 문자열의 맨 앞을 지워야 한다!)
만약 이 과정에서 T가 S와 같아진다면, S로부터 T를 유도할 수 있기 때문에 1을 출력하고 T가 전부 사라질 때 까지 S와 같아지지 않으면 S로부터 T를 유도할 수 없다는 뜻이므로 0을 출력한다.
#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
string S, T;
cin >> S >> T;
int idx=T.size()-1;
while(!T.empty()){
if(S==T){
cout<< 1;
return 0;
}
if(T[idx]=='A'){
T.pop_back();
}
else if(T[idx]=='B'){
reverse(T.begin(),T.end());
//cout << "reverse : " <<T << endl;
T.erase(0,1);
}
//cout << T << endl;
idx = T.size()-1;
}
cout << 0;
return 0;
}
728x90
'알고리즘 > 백준(BOJ)' 카테고리의 다른 글
[백준/C++] 1700번 멀티탭 스케줄링 (0) | 2022.10.02 |
---|---|
[백준/C++] 5014번 스타트링크 (0) | 2022.09.30 |
[백준/C++] 1525번 퍼즐 (0) | 2022.09.30 |
[백준/C++] 3055번 탈출 (0) | 2022.09.30 |
[백준/C++] 1744번 수 묶기 (0) | 2022.09.30 |