프로그래밍/Algorithm

백준 12904 A와 B

모지사바하 2021. 3. 15. 16:21

www.acmicpc.net/problem/12904

 

12904번: A와 B

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

www.acmicpc.net

S, T = [list(input()) for _ in range(2)]
temp = T

for i in range(len(T) - 1, -1, -1):
    if i + 1 == len(S):
        break
    if temp[i] == 'A':
        temp = temp[:i]
    else:
        temp = temp[:i]
        temp = temp[::-1]

if temp == S:
    print(1)
else:
    print(0)

내가 짠 소스

S, T = [list(input()) for _ in range(2)]


while len(S) != len(T):
    if T[-1] == 'A':
        T.pop()
    else:
        T.pop()
        T = T[::-1]

print(1 if S == T else 0)

다른분이 짠 소스

 

우선 이 문제도 스스로 생각해내지 못했다.

S를 T로 만드는 방법을 고민했는데, 잘 모르겠어서 검색해봤다. (그리 깊이 고민하지 않았다. 생각을 하기가 좀 귀찮았고 왠지 빠르게 답을 알고 싶기도 했다)

S를 T로 만드는건 어렵지만 T를 S 로 만들 수 있는지 확인하는건 그리 어렵지 않다.

T에서 A를 만나면 빼고 B 를 만나면 빼고 뒤집는 행위를 반복하여 S와 T의 길이가 같아졌을때, 두 문자가 동일한지만 확인하면 된다.

 

그런데 문제는 내가 짠 소스와 다른분이 짠 소스가 차이가 제법 난다는 것이다.

돌아가는 로직이야 동일하지만, 다른분이 짠 소스가 확실히 명확하고 버그 발생할 확률이 낮았다.

좀 더 노력하고. 좀 다양하게 생각하는 법을 배워야겠다.