본문 바로가기

백준

[백준] 12904번 - A와 B

 

문제

수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다.

이런 사실에 놀란 수빈이는 간단한 게임을 만들기로 했다. 두 문자열 S와 T가 주어졌을 때, S를 T로 바꾸는 게임이다. 문자열을 바꿀 때는 다음과 같은 두 가지 연산만 가능하다.

  • 문자열의 뒤에 A를 추가한다.
  • 문자열을 뒤집고 뒤에 B를 추가한다.

주어진 조건을 이용해서 S를 T로 만들 수 있는지 없는지 알아내는 프로그램을 작성하시오. 

입력

첫째 줄에 S가 둘째 줄에 T가 주어진다. (1 ≤ S의 길이 ≤ 999, 2 ≤ T의 길이 ≤ 1000, S의 길이 < T의 길이)

출력

S를 T로 바꿀 수 있으면 1을 없으면 0을 출력한다.

예제 입력 1 

B
ABBA

예제 출력 1 

1

예제 입력 2 

AB
ABB

예제 출력 2 

 
0


이 문제를 풀 때 연산 순서를 정확히 거꾸로 뒤집어야한다


 1.  거꾸로 풀기 

원래 규칙 (S  T) 거꾸로 풀기 (T  S)
1. 문자열 뒤에 A를 추가한다. 1. 문자열 맨 뒤가 A라면?  A를 뗀다.
2. 문자열을 뒤집고  뒤에 B를 추가한다. 2. 문자열 맨 뒤가 B라면?  B를 떼고  뒤집는다.
 

 

2. 예제 1번 (A  BABA) 

T(BABA)에서 S(A)를 향해 거꾸로 가봅시다.  T의 맨 뒤 글자만 보면 어떤 연산을 했는지 알 수 있습니다.

  1. 현재: BABA
    • 맨 뒤가 A니까
    • 역연산: 맨 뒤 A를 제거합니다.
    • 결과: BAB
  2. 현재: BAB
    • 맨 뒤가 B. (규칙 2번)
    • 역연산: 맨 뒤 B를 제거하고  뒤집습니다.
    • BAB에서 B 제거  BA  뒤집기  AB
    • 결과: AB
  3. 현재: AB
    • 맨 뒤가 B. (규칙 2번)
    • 역연산: 맨 뒤 B를 제거하고  뒤집습니다.
    • AB에서 B 제거  A  뒤집기  A
    • 결과: A
  4. 성공 A는 우리가 찾던 S이기 떄문에.  출력 1

3. 코드

import sys

# 1. 입력 
S =list(sys.stdin.readline().rstrip())
T =list(sys.stdin.readline().rstrip())

# 2. T 의 길이가 S 와 같아질 때까지 줄여나간다
while len(T) > len(S):
    last_char=T.pop()
    
    if last_char=='A':
        # 규칙 1: A 를 추가했었으니까 제거하기
        pass
    
    elif last_char =='B':
        # 규칙 2 : 뒤집고 B 를 추가했었으니, 뒤집기
        T.reverse()

# 3. 결과 확인
if S==T:
    print(1)
else:
    print(0)

 

'백준' 카테고리의 다른 글

[프로그래머스] 등굣길  (0) 2026.02.05
[백준] 12919번 - A 와 B 2  (0) 2026.02.05
[백준] 7490번 - 0만들기  (0) 2026.02.04
[백준] 2531번 - 회전초밥  (0) 2026.02.04
[백준] 1205번 - 등수 구하기  (0) 2026.02.02