본문 바로가기

Coding Test

백준 12904 A와 B (C++)

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을 출력한다.