[골드 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)
이 글은
(새창열림)
본 저작자 표시, 비영리 규칙 하에 배포할 수 있습니다. 자세한 내용은 Creative Commons 라이선스를 확인하세요.
Creative Commons
본 저작자 표시
비영리
'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 - 가운데를 말해요 (파이썬)
2025.04.26 -
[플레티넘 5] 백준 3197 - 백조의 호수 (파이썬)
[플레티넘 5] 백준 3197 - 백조의 호수 (파이썬)
2025.04.26 -
[골드 2] 백준 2381 - 최대 거리 (파이썬)
[골드 2] 백준 2381 - 최대 거리 (파이썬)
2025.04.25 -
[실버 4] 백준 2980 - 도로와 신호등 (파이썬)
[실버 4] 백준 2980 - 도로와 신호등 (파이썬)
2025.04.25
댓글을 사용할 수 없습니다.