반응형
그리디 문제이다.
#접근 방법
처음에 문제를 읽어봤을 때 이걸 어떻게 해야하지..? 생각이 들수도 있다.
나도 그랬다.
문자열 S에 언제 A를 추가해야할지, 또는 언제 B를 추가하고 뒤집어야하는지..
한 3분정도 생각하다가 답이 안나와서 만들어야 할 문자열에서 A와 B를 빼면 되지 않을까? 라는 생각이 들었다.
한번쯤은 직관적으로 문제에 접근해도 좋지만 만약 안풀린다면 추가하는 것이 아니라 반대로 생각해서 빼보는 방식도 고려해봐야할 것이다.
즉, 문자열 S1에서 만들어야 할 문자열이 S2 라면,
S2에서 A를 빼주고, 또는 B를 빼주고 문자열을 뒤집는다.
언제동안? S1과 S2의 길이가 같을때까지!
문자열의 길이가 같아졌을 때 같은 문자열이 맞는지 비교해서 출력하면 끝이다.
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
string s1, s2;
cin >> s1 >> s2;
int idx = s2.size() - 1;
while (s1.size() < s2.size()) {
if (s2[idx] == 'A')s2.pop_back();
else {
s2.pop_back();
reverse(s2.begin(), s2.end());
}
idx--;
}
if (s1 == s2)cout << 1;
else cout << 0;
}
반응형
'백준 > 그리디' 카테고리의 다른 글
[백준 1461번 / C++] 도서관 (0) | 2022.04.06 |
---|---|
[백준 13904번 / C++] 과제 (0) | 2022.04.05 |
[백준 1449번 / C++] 수리공 항승 (0) | 2022.04.05 |
[백준 13458번 / C++] 시험 감독 (0) | 2022.03.31 |
[백준 12845번 / C++] 모두의 마블 (0) | 2022.03.31 |
댓글