첫째 줄에 S가 둘째 줄에 T가 주어진다. (1 ≤ S의 길이 ≤ 49, 2 ≤ T의 길이 ≤ 50, S의 길이 < T의 길이)
출력
S를 T로 바꿀 수 있으면 1을 없으면 0을 출력한다.
입력 예시
A
BABA
출력 예시
1
풀이
브루트포스 문제.
하지만 S에서 T 길이만큼 모든 경우를 실행해 보려면 최악 2^49번 규모의 경우의 수(실제로는 순열이므로 훨씬 작긴 하겠지만)을 테스트해야 한다. 그러므로 거꾸로 뒤집어, T에서 S로 도달할 수 있는지를 따져보는 게 편하다.
문자열의 뒤에 A를 추가 -> 문자열 맨 뒤가 A라면 제거 가능
문자열의 뒤에 B를 추가 후 문자열을 뒤집음 -> 문자열 맨 앞이 B라면, 맨 앞을 제거하고 뒤집을 수 있음
으로 조건을 설정 가능하다. 이리하여 S에 도달할 수 있는 경우에만 1을 출력하도록 하면 된다.
풀이 코드
from collections import deque
S = input().strip()
T = input().strip()
q = deque([T])
while q :
x = q.pop()
if x == S :
print(1)
exit()
if len(x) == len(S) :
continue
if x[-1] == 'A' :
q.append(x[:-1])
if x[0] == 'B' :
q.append(x[1:][::-1])
print(0)