문제 링크입니다: 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가 되는지 여부를 파악하면 되는 문제였습니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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; | |
} |


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
반응형
'알고리즘 > 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 |