[BOJ] 12904번 | A와 B (C++)

2024. 3. 28. 16:02ㆍCoding Test/BOJ

πŸ”—λ¬Έμ œ λ³΄λŸ¬κ°€κΈ°
 

12904번: A와 B

μˆ˜λΉˆμ΄λŠ” A와 B둜만 이루어진 μ˜μ–΄ 단어가 μ‘΄μž¬ν•œλ‹€λŠ” 사싀에 λ†€λžλ‹€. λŒ€ν‘œμ μΈ 예둜 AB (Abdominal의 μ•½μž), BAA (μ–‘μ˜ 울음 μ†Œλ¦¬), AA (μš©μ•”μ˜ μ’…λ₯˜), ABBA (μŠ€μ›¨λ΄ 팝 κ·Έλ£Ή)이 μžˆλ‹€. 이런 사싀에 λ†€λž€ 수

www.acmicpc.net

 

πŸ‘¨‍πŸ’»ν’€μ΄ κ³Όμ •

 

그리디 λ°©μ‹μœΌλ‘œλ„ ν’€ 수 μžˆλ‹€κ³  ν•˜κΈΈλž˜, μ–΄λ–»κ²Œ ν•˜λŠ”μ§€ κΆκΈˆν•΄μ„œ κ΄€λ ¨ πŸ”—νžŒνŠΈ 글을 μ°Ύμ•„λ΄€μŠ΅λ‹ˆλ‹€. 이런 생각을 ν•  수 μžˆλ‹€λ‹ˆ... λŒ€λ‹¨ν•˜λ„€μš”. μ„Έμƒμ—λŠ” μ²œμž¬κ°€ λ„ˆλ¬΄ λ§ŽμŠ΅λ‹ˆλ‹€.

 

κΈ°μ‘΄ λ¬Έμžμ—΄μΈ Sμ—μ„œ λͺ©ν‘œλ‘œ ν•˜λŠ” λ¬Έμžμ—΄ T둜 λ³€ν™˜ν•˜λŠ” 경우의 μˆ˜λŠ” λ„ˆλ¬΄ λ§Žμ€λ° λΉ„ν•΄, κ·Έ 경우의 μˆ˜κ°€ λ‹€ μ˜¬λ°”λ₯Έ 길도 μ•„λ‹™λ‹ˆλ‹€. 그렇기에, Tμ—μ„œ S둜 λ°˜λŒ€λ‘œ λ³€ν™˜ν•˜λŠ” 것이 μ•„μ΄λ””μ–΄λ”κ΅°μš”. Tμ—μ„œ S둜 λ³€ν™˜ν•΄ λ‚˜κ°€λŠ” 과정은 Sμ—μ„œ T둜 λ³€ν™˜ν•  λ•Œμ˜ μ˜¬λ°”λ₯Έ κ³Όμ •λ§Œμ΄ 담겨 μžˆμ„ ν…Œλ‹ˆκΉŒμš”.

 

λ‹€μŒ 방식에 따라 Tλ₯Ό S둜 λ³€ν™˜ν•  수 있으면 True, T의 길이가 1 μ΄ν•˜κ°€ λλŠ”λ°λ„ Sκ°€ μ•ˆ λœλ‹€λ©΄ Falseλ₯Ό λ°˜ν™˜ν•΄μ£Όλ©΄ λ˜κ² μŠ΅λ‹ˆλ‹€.

 

  1. λ¬Έμžμ—΄ T의 λ§ˆμ§€λ§‰ λ¬Έμžκ°€ A인 경우
    • 1번 연산인 "λ¬Έμžμ—΄μ˜ 뒀에 Aλ₯Ό μΆ”κ°€ν•œλ‹€"만 κ°€λŠ₯
    • λ°˜λŒ€λ‘œ 역좔적해 λ‚˜κ°€λŠ” κ³Όμ •μ΄λ―€λ‘œ, T의 λ§ˆμ§€λ§‰ 문자인 Aλ₯Ό μ œκ±°ν•˜κ³  λ‹€μ‹œ 검사
  2. λ¬Έμžμ—΄ T의 λ§ˆμ§€λ§‰ λ¬Έμžκ°€ B인 경우
    • 2번 연산인 "λ¬Έμžμ—΄μ„ 뒀집고, 뒀에 Bλ₯Ό μΆ”κ°€ν•œλ‹€"만 κ°€λŠ₯
    • λ°˜λŒ€λ‘œ 역좔적해 λ‚˜κ°€λŠ” κ³Όμ •μ΄λ―€λ‘œ, T의 λ§ˆμ§€λ§‰ 문자인 Bλ₯Ό μ œκ±°ν•˜κ³ , Tλ₯Ό 뒀집은 λ‹€μŒμ— λ‹€μ‹œ 검사

 

✏️ μ†ŒμŠ€ μ½”λ“œ 및 κ²°κ³Ό

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;
#define FAST_IO ios::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL);

bool IsAvailable(const string& source, string currentString)
{
    if (source == currentString)        return true;
    if (currentString.length() <= 1)    return false;

    if (currentString.back() == 'A')
    {
        currentString.pop_back();
        return IsAvailable(source, currentString);
    }

    currentString.pop_back();
    reverse(currentString.begin(), currentString.end());
    return IsAvailable(source, currentString);
}

int main()
{
    FAST_IO
    string source, destination;
    cin >> source >> destination;

    cout << IsAvailable(source, destination);
    return 0;
}

 

728x90
λ°˜μ‘ν˜•