Algorithm/BOJ

[백준] #12904 A와 B

jHoon0223 2021. 8. 22. 21:48

12904번: A와 B (acmicpc.net)

 

12904번: A와 B

수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수

www.acmicpc.net

아무리 생각해도 브루트포스로 풀면 시간초과가 나올거 같아 생각을 하던 중, S에서 T를 만들지 말고 T에서 S를 만드는 방법으로 생각하니 금방 풀렸다.


  • 풀이

T에서 S로 만드는 알고리즘으로 바꾸어 생각해보자.

그렇다면 적용할 수 있는 연산은 T의 마지막 글자에 따라 무조건 하나로 정해지게 된다.

case 1. T의 마지막 글자가 A인 경우 : pop_back()
case 2. T의 마지막 글자가 B인 경우 : pop_back() 후, reverse로 거꾸로 정렬

이후 두 문자의 길이에 따라 적절히 반복문 제어 후 출력

T의 마지막 글자에 따라 명확한 규칙성이 생기기 때문에 훨씬 더 쉽게 구현할 수 있다.


  • 구현
#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main() {
    string S, T;
    cin >> S >> T;

    bool flag = false;
    int lenS = S.length(), lenT = T.length();

    while (lenS <= lenT) {
        if (S == T) {
            flag = true;
            break;
        }
        if (T.back() == 'A') T.pop_back();
        else {
            T.pop_back();
            reverse(T.begin(), T.end());     
        }
        lenS = S.length();
        lenT = T.length();
    }

    flag ? cout << 1 : cout << 0;

    return 0;
}

728x90

'Algorithm > BOJ' 카테고리의 다른 글

[백준] #1946 신입사원  (0) 2021.09.28
[백준] #16953 A → B  (0) 2021.08.23
[백준] #1918 후위 표기식  (0) 2021.08.22
[백준] #17609 회문  (0) 2021.08.19
[백준] #1254 팰린드롬 만들기  (0) 2021.08.17