본문 바로가기
Algorithm/Baekjoon

12904. A와 B (Python)

by 원만사 2022. 7. 11.
반응형

 

 

12904번: A와 B

수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수

www.acmicpc.net

 

풀이

 문자열 S에 할 수 있는 연산은 다음과 같다.

 

 만약 문자열 S에서 문자열 T를 만들 수 있는지 체크한다면 위의 두 가지 연산을 모두 수행해 봐야 할 것이다. 하지만 반대로 문자열 T에서 문자열 S가 될 수 있는지를 체크하면 현재 문자열 T의 맨 뒤에 문자가 'A'인지 'B'인지에 따라서 한 가지 연산만 하면 된다.

 

 

 문제에서 주어진 위의 예제를 살펴보자. ABBA를 한 자리의 문자열로 바꾸려면 다음과 같은 작업이 행해진다.

  1. 맨 뒤의 문자를 제거한다. ABBA의 맨 뒤의 문자가 A이므로 ABB가 되고 문자는 뒤집지 않아도 된다.
  2. ABB의 맨 뒤의 문자를 제거한다. 뒤의 문자가 B이므로 AB가 되고 이를 뒤집으면 BA가 된다. 
  3. BA의 맨 뒤의 문자를 제거한다. 뒤의 문자가 A이므로 B가 되고 문자는 뒤집지 않아도 된다.

 

 위의 과정을 진행하고 나면 두 문자열 S와 T가 같은 길이를 가진 문자열이 되고 두 문자열 모두 'B'로 같음을 알 수 있다.

 

코드

if __name__ == '__main__':
    S = input()
    T = input()

    while len(S) != len(T):
        if T[-1] == 'A': # 맨 뒤의 문자가 A이면 문자만 제거하고 뒤집지 않아도 된다.
            T = T[:len(T) - 1]
        else: # 맨 뒤의 문자가 B이면 문자 제거 후 문자열을 뒤집는다.
            T = T[:len(T) - 1]
            T = ''.join(reversed(T))

    if S == T:
        print(1)
    else:
        print(0)
반응형

'Algorithm > Baekjoon' 카테고리의 다른 글

1253. 좋다 (Python)  (0) 2022.07.13
19238. 스타트 택시 (Python)  (0) 2022.07.13
16724. 피리 부는 사나이 (Python)  (0) 2022.07.11
2208. 보석 줍기 (Python)  (0) 2022.07.06
14391. 종이 조각 (Python)  (0) 2022.07.06

댓글