출처 : 백준 #12904
시간 제한 | 메모리 제한 |
---|---|
2초 | 512MB |
수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다.
이런 사실에 놀란 수빈이는 간단한 게임을 만들기로 했다. 두 문자열 S와 T가 주어졌을 때, S를 T로 바꾸는 게임이다. 문자열을 바꿀 때는 다음과 같은 두 가지 연산만 가능하다.
첫째 줄에 S가 둘째 줄에 T가 주어진다. (1 ≤ S의 길이 ≤ 999, 2 ≤ T의 길이 ≤ 1000, S의 길이 < T의 길이)
S를 T로 바꿀 수 있으면 1을 없으면 0을 출력한다.
B
ABBA
1
AB
ABB
0
O(2^N)
의 공간 복잡도가 생긴다...# 백준 12904번 A와 B
from sys import stdin
from collections import deque
input = stdin.readline
S = input().rstrip()
T = input().rstrip()
def solution(T, S):
n = len(T) - len(S)
S_a, S_b, T_a, T_b = 0, 0, 0, 0
for s in S:
if s == "A":
S_a += 1
else:
S_b += 1
for t in T:
if t == "A":
T_a += 1
else:
T_b += 1
result = deque([(S, 0, S_a, S_b)])
while result:
now, count, sa, sb = result.popleft()
if len(now) != len(T):
if count % 2 == 0: # 짝수번 뒤집힌 상태
a = now + "A"
b = "B" + now
else: # 홀수번 뒤집힌 상태
a = "A" + now
b = now + "B"
if sa < T_a:
result.append((a, count, sa+1, sb))
if sb < T_b:
result.append((b, count+1, sa, sb+1))
else:
if count % 2 == 0:
if now == T:
return 1
else:
if now[::-1] == T:
return 1
return 0
print(solution(T, S))
# 백준 12904번 A와 B
from sys import stdin
from collections import deque
input = stdin.readline
S = input().rstrip()
T = input().rstrip()
def solution(T, S):
while T != S:
if T[-1] == "A":
T = T[:-1]
else:
T = T[::-1][1:]
# print(T)
if len(T) <= len(S):
if T == S:
return 1
else:
return 0
return 1
print(solution(T, S))