백준 12904 c++ : 구현, 문자열

magicdrill·2025년 3월 3일

백준 문제풀이

목록 보기
562/673

백준 12904 c++ : 구현, 문자열

처음에는 재귀 방식으로 A 추가 또는 B 추가하고 뒤집기 를 모두 수행해서 S == T인 경우가 하나라도 있는지 판단하려 했다.
그런데 S == T를 만족하는 경우 하나만 찾으면 되기 때문에 S에서 T를 찾는게 아니라 반대로 T에서 S를 찾는 방식이 더 효율적이다.

#include <iostream>
#include <algorithm>

using namespace std;

//S에서 T가 아니라 T에서 S로 이동
int find_answer(string S, string T) {
    while (T.length() > S.length()) {
        if (T.back() == 'A') {//문자열 제일 뒤가 A라면?
            T.pop_back();  // A 제거
            cout << "back A 제거\n";
        }
        else {//문자열 제일 뒤가 B라면?
            T.pop_back();  // B 제거
            reverse(T.begin(), T.end());  // 뒤집기
            cout << "back B 제거 + reverse\n";
        }
        cout << T << "\n";
    }
    
    if (S == T) {
        return 1;
    }
    else {
        return 0;
    }
}

int main(void) {
	string S, T;

	cin >> S >> T;
	cout << find_answer(S, T) << "\n";

	return 0;
}

0개의 댓글