오늘의 알고리즘
[C++] 백준 12919번 A와 B 2
하늘하늘 .
2022. 4. 28. 19:03
#include <iostream>
#include <algorithm>
#include <string>
#include <queue>
// 1. A 추가 -> A 삭제
// 2. B 추가 뒤집기 -> (앞이 B라면) 뒤집기, B 삭제
std::string A = {};
void Reverse(std::string& str)
{
int iSize = str.size();
for (int i = 0; i < iSize * 0.5; ++i)
{
char cTemp = str[i];
str[i] = str[iSize - 1 - i];
str[iSize - 1 - i] = cTemp;
}
}
int main()
{
std::string B = {};
std::cin >> A >> B;
std::queue<std::string> que = {};
que.push(B);
while (!que.empty())
{
std::string str = que.front();
que.pop();
if (A.size() == str.size())
{
if (A == str)
{
std::cout << 1;
return 0;
}
else
continue;
}
if (str.back() == 'A')
{
str.pop_back();
que.push(str);
str.push_back('A');
}
if (str.front() == 'B')
{
Reverse(str);
str.pop_back();
que.push(str);
}
}
std::cout << 0;
return 0;
}
queue를 이용해서 BFS로 뒤에서부터 계산