백준(C, C++)/골드

백준 12904: A와 B [C/C++]

치킨먹고싶어요 2022. 6. 27. 16:39

https://www.acmicpc.net/problem/12904

 

12904번: A와 B

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

www.acmicpc.net

코드
#include <iostream>
#include <algorithm>
#include <string>
#define fastio() ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;
string s, t;
int ss, tt;
 
int main() {
    fastio();
    cin >> s >> t;
    ss = s.size() - 1; tt = t.size() - 1;
    while (ss != tt) {
        if (t[tt--== 'A') t.pop_back();
        else {
            t.pop_back();
            reverse(t.begin(), t.end());
        }
    }
    if (s == t) cout << 1;
    else cout << 0;
    return 0;
}
cs

 

 

풀이
https://www.pexels.com/ko-kr/photo/abc-1337372/
ABA
ABBABABABABBBABA

입력이 위와 같이 주어진다면 더 긴 문자열을 기준으로 맨 뒤자리를 지워주면서 진행합니다

 

1.

ABA
ABBABABABABBBAB
  • 문자열의 뒤에 A를 추가한다

위 규칙에 인하여 그냥 맨 뒤의 A를 없애주면 됩니다

 

2.

ABBABABABABBBAB -> ABBABABABABBBA -> ABBBABABABABBA
  • 문자열을 뒤집고 뒤에 B를 추가한다.

위 규칙에 의하여 맨 뒤의 B를 없애고 뒤집어주면 됩니다.

 

1과 2를 S와 T의 길이가 같아질 때 까지 반복하면 됩니다.