Programming/백준
[골드 5] 백준 12919 - A와 B 2 (파이썬)
pental
2025. 4. 26. 12:17
https://www.acmicpc.net/problem/12919
풀이
- 문자열 S에서 시작하여 문자열 T를 만들 수 있는지 판단하는 문제이다.
- 수행할 수 있는 연산은 다음과 같다,
- 문자열 뒤에 ‘A’ 추가
- 문자열을 뒤집고 뒤에 ‘B’ 추가
하지만 이 코드에서는 역방향으로, 즉 T에서 시작해서 S로 갈 수 있는지 확인한다.
def dfs(t):
if len(t) == len(S):
return t == S
현재 문자열 t의 길이가 S와 같아졌다면 t == S 인지 비교해서 결과를 반환한다.
if t[-1] == "A":
if dfs(t[:-1]):
return True
재귀 조건으로 문자열 끝이 A라면 A를 추가한 결과였을 수 있으므로 마지막 문자를 제거하고 재귀를 호출한다.
if t[0] == 'B':
if dfs(t[1:][::-1]):
return True
문자열 시작이 B라면 B를 뒤에 붙이고 뒤집은 결과였을 수 있으므로, 첫문자를 제거하고, 뒤집고, 재귀를 호출한다.
시간 복잡도 분석
- 최악의 경우 문자열 길이가 최대 50이므로
- 재귀 깊이는 최대 50이며
- 가지치기가 잘 작동하면 효율적이다.
코드
# 백준 12919 - A와 B 2
# 분류 : 문자열
S = input()
T = input()
def dfs(t) :
if len(t) == len(S) :
return t == S
if t[-1] == "A" :
if dfs(t[:-1]) :
return True
if t[0] == 'B' :
if dfs(t[1:][::-1]) :
return True
return False
if dfs(T) :
print(1)
else :
print(0)