알고리즘/BOJ

백준 12904번 A와 B

꾸준함. 2019. 5. 6. 12:00

문제 링크입니다: https://www.acmicpc.net/problem/12904

 

12904번: A와 B

수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수빈이는 간단한 게임을 만들기로 했다. 두 문자열 S와 T가 주어졌을 때, S를 T로 바꾸는 게임이다. 문자열을 바꿀 때는 다음과 같은 두 가지 연산만 가능하다. 문자열의 뒤에 A를 추가한다. 문자열을 뒤집고 뒤에 B를 추가한다.

www.acmicpc.net

'정방향이 아닌 역방향으로 진행해야지' 라는 생각을 했다면 쉽게 풀 수 있는 문제였고 이러한 생각을 하지 못했다면 어려웠을 문제였습니다.

T에서부터 각 단계의 마지막 글자에 대해 처리했을 때 S가 되는지 여부를 파악하면 되는 문제였습니다.

 

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool flag;
string S, T;
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> S >> T;
//T로부터 역순으로 진행할 때 S가 되는지 여부 파악
while (1)
{
if (S.length() == T.length())
{
if(S == T)
flag = true;
break;
}
char c = T[T.length() - 1];
T.pop_back();
if (c == 'B')
reverse(T.begin(), T.end());
}
cout << flag << "\n";
return 0;
}
view raw .cpp hosted with ❤ by GitHub

개발환경:Visual Studio 2017

 

지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

'알고리즘 > BOJ' 카테고리의 다른 글

백준 17142번 연구소 3  (3) 2019.05.08
백준 17140번 이차원 배열과 연산  (2) 2019.05.08
백준 8982번 수족관 1  (3) 2019.05.06
백준 15361번 Izbori  (5) 2019.05.03
백준 15360번 Rasvjeta  (2) 2019.05.03