๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ

[BOJ] 12904๋ฒˆ | A์™€ B (C++)

category ๐Ÿค–Algorithm/BOJ 2024. 3. 28. 16:02
728x90
๐Ÿ”—๋ฌธ์ œ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ
 

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
๋ฐ˜์‘ํ˜•