백준(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 |
풀이

ABA
ABBABABABABBBABA
입력이 위와 같이 주어진다면 더 긴 문자열을 기준으로 맨 뒤자리를 지워주면서 진행합니다
1.
ABA
ABBABABABABBBAB
- 문자열의 뒤에 A를 추가한다
위 규칙에 인하여 그냥 맨 뒤의 A를 없애주면 됩니다
2.
ABBABABABABBBAB -> ABBABABABABBBA -> ABBBABABABABBA
- 문자열을 뒤집고 뒤에 B를 추가한다.
위 규칙에 의하여 맨 뒤의 B를 없애고 뒤집어주면 됩니다.
1과 2를 S와 T의 길이가 같아질 때 까지 반복하면 됩니다.