본문 바로가기

백준/골드

[백준 12919번] A와 B 2 (C++)

문제링크 : https://www.acmicpc.net/problem/12919

#include <bits/stdc++.h> 
using namespace std;

string S, T, temp = "";
int result = 0;
void func(string s, string t)
{
	if (s == t) { result = 1; return; }   //바꿀 수 있을 때
	if (s.size() >= t.size()) { return; } //바꿀 수 없을 때
	if (t[t.size() - 1] == 'A')  //맨 마지막이 A이면
	{
		temp = t;
		temp.erase(temp.size() - 1);  //A를 지우고 재귀
		func(s, temp);

	}
	if (t[0] == 'B')  //맨 처음이 B이면
	{
		temp = t;
		temp.erase(temp.begin());    //B를 지우고 뒤집은 뒤 재귀
		reverse(temp.begin(), temp.end());
		func(s, temp);
	}
}

int main()
{
	cin >> S >> T;
	func(S, T);
	cout << result;
}

원래 문제대로 S -> T로 바꾸면 가짓수가 너무 많아서 복잡하므로 T -> S로 바꾸는 방법을 사용했다.