https://www.acmicpc.net/problem/12904
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string s, t;
cin >> s;
cin >> t;
while (s.size() != t.size()) {
if (t.back() == 'A') {
t.pop_back();
} else {
t.pop_back();
reverse(t.begin(), t.end());
}
}
if (s == t) {
cout << 1;
} else {
cout << 0;
}
return 0;
}
1. 문제
두 문자열 s와 t가 주어진다. s에서 다음의 연산을 통해 t를 만들고자 한다.
- 문자열의 뒤에 A를 추가한다.
- 문자열을 뒤집고 뒤에 B를 추가한다.
s를 t로 만들 수 있다면 1, 없다면 0을 출력하라.
2. 풀이
t를 s로 바꾸어야 시간초과가 나지 않는 문제이다.
while (s.size() != t.size()) {
if (t.back() == 'A') {
t.pop_back();
} else {
t.pop_back();
reverse(t.begin(), t.end());
}
}
두 연산 모두 문자를 하나씩 추가하는 연산이므로 문자열의 길이가 같을 때까지 연산을 진행한다. t의 끝이 A라면 가장 최근에 첫 번째 연산을 진행한 것이므로 반대로 이를 제거한다. 만약 B라면 두 번째 연산을 진행한 것이므로 반대로 B를 빼고 문자열을 뒤집는다.
if (s == t) {
cout << 1;
} else {
cout << 0;
}
역산을 진행하고 나서 두 문자열이 같다면 1을, 다르다면 0을 출력한다.
'Coding Test' 카테고리의 다른 글
백준 2631 줄세우기 (C++) (0) | 2024.09.09 |
---|---|
백준 18427 함께 블록 쌓기 (C++) (0) | 2024.09.06 |
백준 1790 수 이어 쓰기 2 (C++) (3) | 2024.08.31 |
백준 6198 옥상 정원 꾸미기 (C++) (0) | 2024.08.27 |
백준 1967 트리의 지름 (C++) (0) | 2024.08.23 |