문제
수빈이는 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의 맨 뒤 글자만 보면 어떤 연산을 했는지 알 수 있습니다.
- 현재: BABA
- 맨 뒤가 A니까
- 역연산: 맨 뒤 A를 제거합니다.
- 결과: BAB
- 현재: BAB
- 맨 뒤가 B. (규칙 2번)
- 역연산: 맨 뒤 B를 제거하고 뒤집습니다.
- BAB에서 B 제거 BA 뒤집기 AB
- 결과: AB
- 현재: AB
- 맨 뒤가 B. (규칙 2번)
- 역연산: 맨 뒤 B를 제거하고 뒤집습니다.
- AB에서 B 제거 A 뒤집기 A
- 결과: A
- 성공 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 |