
처음에는 재귀 방식으로 A 추가 또는 B 추가하고 뒤집기 를 모두 수행해서 S == T인 경우가 하나라도 있는지 판단하려 했다.
그런데 S == T를 만족하는 경우 하나만 찾으면 되기 때문에 S에서 T를 찾는게 아니라 반대로 T에서 S를 찾는 방식이 더 효율적이다.
#include <iostream>
#include <algorithm>
using namespace std;
//S에서 T가 아니라 T에서 S로 이동
int find_answer(string S, string T) {
while (T.length() > S.length()) {
if (T.back() == 'A') {//문자열 제일 뒤가 A라면?
T.pop_back(); // A 제거
cout << "back A 제거\n";
}
else {//문자열 제일 뒤가 B라면?
T.pop_back(); // B 제거
reverse(T.begin(), T.end()); // 뒤집기
cout << "back B 제거 + reverse\n";
}
cout << T << "\n";
}
if (S == T) {
return 1;
}
else {
return 0;
}
}
int main(void) {
string S, T;
cin >> S >> T;
cout << find_answer(S, T) << "\n";
return 0;
}