❓문제 설명
A와 B로만 이루어진 두 문자열 S, T를 입력 받고
1. 문자열 뒤에 A 추가
2. 문자열을 뒤집고, 뒤에 B 추가
두 가지 규칙으로 S 문자열을 T로 변경할 수 있는지 여부(1, 0)를 판단하는 문제이다.
❗️문제 풀이
S -> T 과정에는 특정 전제 조건 없이
A추가 / 뒤집은 후 B 추가
를 진행해야 한다.
반대로 T -> S 로 과정을 전환하면
마지막 문자에 따라 A 제거 / B 제거 후 뒤집기
로 if문을 사용하기 적합해진다.
결과적으로, 제시된 과정을 반대로 수행해 답을 구했다.
A 추가 => A 제거
뒤집은 후 B 추가 => B 제거 후 뒤집기
def reverse(str):
return str[::-1]
def AB(S, T):
while len(T) > len(S):
if T[-1] == 'A':
T = T[:-1]
elif T[-1] == 'B':
T = T[:-1]
T = reverse(T)
return 1 if T == S else 0
문자열을 역순으로 뒤집기 위해 reverse()란 함수를 선언하고
AB() 함수를 통해 마지막 문자에 따라 거꾸로 변경한 규칙을 적용했다.
📌전체 코드
import sys
S = sys.stdin.readline().strip()
T = sys.stdin.readline().strip()
# 문자열의 뒤에 A 추가 -> 문자열의 뒤에서 A 빼기
# 문자열을 뒤집고 뒤에 B 추가 -> 문자열의 맨 뒤에서 B 빼고 뒤집기
def reverse(str):
return str[::-1]
def AB(S, T):
while len(T) > len(S):
if T[-1] == 'A':
T = T[:-1]
elif T[-1] == 'B':
T = T[:-1]
T = reverse(T)
return 1 if T == S else 0
print(AB(S, T))
'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ] 1654: 랜선 자르기 (0) | 2024.06.25 |
---|---|
[BOJ] 13305: 주유소 (0) | 2024.04.30 |
[BOJ] 1406: 에디터 (0) | 2024.03.31 |
[BOJ] 9009: 피보나치 (2) | 2024.03.18 |
[BOJ] 11866: 요세푸스 문제 0 (0) | 2024.01.02 |