[골드 5] 백준 12919 - A와 B 2 (파이썬)
글 작성자: pental
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)
'Programming > 백준' 카테고리의 다른 글
[골드 2] 백준 1655 - 가운데를 말해요 (파이썬) (0) | 2025.04.26 |
---|---|
[플레티넘 5] 백준 3197 - 백조의 호수 (파이썬) (0) | 2025.04.26 |
[골드 2] 백준 2381 - 최대 거리 (파이썬) (0) | 2025.04.25 |
[실버 4] 백준 2980 - 도로와 신호등 (파이썬) (0) | 2025.04.25 |
[골드 3] 백준 16437 - 양 구출 작전 (파이썬) (0) | 2025.04.24 |
댓글
이 글 공유하기
다른 글
-
[골드 2] 백준 1655 - 가운데를 말해요 (파이썬)
[골드 2] 백준 1655 - 가운데를 말해요 (파이썬)
12:20:32 -
[플레티넘 5] 백준 3197 - 백조의 호수 (파이썬)
[플레티넘 5] 백준 3197 - 백조의 호수 (파이썬)
12:19:05 -
[골드 2] 백준 2381 - 최대 거리 (파이썬)
[골드 2] 백준 2381 - 최대 거리 (파이썬)
2025.04.25 -
[실버 4] 백준 2980 - 도로와 신호등 (파이썬)
[실버 4] 백준 2980 - 도로와 신호등 (파이썬)
2025.04.25