https://www.acmicpc.net/problem/12919
12919번: A와 B 2
수빈이는 A와 B로만 이루어진 영어 단어 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수빈
www.acmicpc.net
[난이도] Gold5
[유형] 브루트포스
[풀이]
S에서 T를 만드려고 하면 모든 문자에서 두가지 연산을 다 해봐야 하기 때문에 시간초과가 발생합니다.
역으로 T에서 S로 원복시키는 방식으로 하면 각 연산을 적용할 수 없는 경우가 생기기 때문에
많은 케이스가 가지치기 됩니다.
그러므로 재귀함수로 T에서 S를 만들 때 가능한 모든 경우의 수를 구해서 체크해주면 됩니다.
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
string S,T;
bool ok;
void sol(string s){
if(s==S){
ok=1;
return;
}
if(s.size()<=S.size()) return;
if(s.front()=='B'){
string tmp = s;
reverse(tmp.begin(),tmp.end());
tmp.pop_back();
sol(tmp);
}
if(s.back()=='A'){
s.pop_back();
sol(s);
}
}
int main(){
cin >> S >> T;
sol(T);
cout << ok;
}
https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold5/12919.cpp
'Problem-Solving > BOJ' 카테고리의 다른 글
[BOJ/백준][Bronze3] 17608 : 막대기 (C++) (0) | 2022.07.04 |
---|---|
[BOJ/백준][Gold3] 2830 : 행성 X3 (C++) (0) | 2022.05.29 |
[BOJ/백준][Gold5] 2617 : 구슬 찾기 (C++) (0) | 2022.05.29 |
[BOJ/백준][Gold5] 7682 : 틱택토 (C++) (0) | 2022.05.29 |
[BOJ/백준][Gold5] 1374 : 강의실 (C++) (0) | 2022.05.29 |