백준 12904번 - A와 B

A와 B 문제 바로 가기

풀이 날짜: 2026-01-24

baekjoon 알고리즘 문제 풀이

풀이 코드


import sys
input = sys.stdin.readline

s = input().strip()
t = input().strip()

while len(t) > len(s):
    if t[-1] == 'A':
        t = t[:-1]
    else:
        t = t[:-1]
        t = t[::-1]
print(1 if t==s else 0)

print(count)  

문제 핵심 요약:

12904번 문제는 문자열 S에서 T를 만드는 문제처럼 보이지만, 이 방향으로 생각하면 매 단계마다 선택지가 두 개(A 추가 / B 추가 후 뒤집기)로 갈라져 경우의 수가 폭발한다. 따라서 단순한 탐색이나 그리디로는 접근하기 어렵다. 이 문제의 핵심은 정방향(S → T)이 아니라 역방향(T → S)으로 생각해야 한다는 점이다.


역방향으로 생각

  • 문자열의 마지막 문자가 A라면, 이는 이전 단계에서 A를 붙였다는 의미이므로 단순히 A를 제거하면 된다.
  • 문자열의 마지막 문자가 B라면, 이는 B를 붙이고 뒤집은 결과이므로 B를 제거한 뒤 문자열을 다시 뒤집으면 이전 상태로 돌아갈 수 있다.

헷갈렸던 것 정리

문자열 슬라이싱
  • t[:-1] : 문자열의 마지막 문자 제거
  • t[::-1] : 문자열을 완전히 뒤집기