티스토리 뷰

알고리즘/BOJ

[백준] 12919 A와 B 2

세진짱 2020. 2. 7. 17:39

A와 B의 규칙을 잘 생각해보자

우리는 S->T 가 아닌 뒤집어서 T->S로 문제를 풀어본다!

 

1) 맨 뒤에 A를 붙인다

2) 맨 뒤에 B를 붙이고 뒤집기 => 뒤집고 앞에 B 붙이기

 

 

그럼 문제를 풀기 위해 나올 수 있는 상황 4가지를 생각해보자

 

 

1. A ~ A => 1번경우 가능

2. A ~ B => 불가능

3. B ~ A => 1,2 번 가능

4. B ~ B => 2번가능

 

4가지를 그대로 코딩해주면 시간안에 충분히 나온다!

 

 

 

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string s, t;
 
bool solve(string f) {
    if (f.length() < s.length()) return false;
    if (f.length() == s.length()) return (s == f);
    bool ret = false;
    char s = f[0], e = f.back();
    int len = f.length();
    if (s == 'A') {
        if (e == 'A') ret |= solve(f.substr(0, len - 1));
        else return false;
    }
    else {
        if (e == 'A') ret |= solve(f.substr(0, len - 1));
        reverse(f.begin(), f.end());
        f.pop_back();
        ret |= solve(f);
    }
    return ret;
}
int main() {
    cin >> s >> t;
    printf("%d\n", solve(t));
}
 
 

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

[백준] 16637 괄호 추가하기  (0) 2020.02.08
[백준] 12924 멋진 숫자 쌍  (0) 2020.02.07
[백준] 12945 재미있는 박스 정리  (0) 2020.02.05
[백준] 10800 컬러볼  (0) 2020.02.05
[백준] 1445 일요일 아침의 데이트  (0) 2020.02.05
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함