공부 기록장

백준 12904. A와 B 본문

코딩 테스트/백준 문제 풀이

백준 12904. A와 B

빛나무 2024. 1. 20. 22:50

https://www.acmicpc.net/problem/12904

 

12904번: A와 B

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

www.acmicpc.net

 

코드

s = input()
t = input()

while True:
    tLen = len(t)
    sLen = len(s)

    if tLen <= sLen:
        break

    if t[tLen-1] == 'A':
        t = t[:tLen-1]

    else:
        t = t[:tLen-1]
        tmp = list(t)
        tmp.reverse()
        t = ''.join(tmp)

if t == s:
    print(1)
else:
    print(0)

 

그리디와 dfs/bfs 섞어서 복습하는 회차인데

유형을 모르고 푸는 거라 알고 푸는 거랑 좀 다르다 ..

 

그리디 문제들 풀 때, 해당 문제와 비슷한 문제를 풀었던 기억이 났다.

 

S에서 T로 바꿀 수 있는 지 여부를 확인하는 문제이지만,

T에서 거꾸로 연산을 수행하면서 S가 되는지 확인하면 문제를 해결할 수 있다.

 

연산이 어떤 변수의 뒤에 영향을 주고 다른 변수로 변환이 가능한지 묻는 유형의 문제는

거꾸로 연산을 수행한다는 아이디어를 떠올릴 수 있도록

잘 기억을 해두어야겠다.

 

 

또한 문자열을 뒤집는 방법으로는

 

1. 반복문 활용

str1 = 'hello world'
reverse_str1 = ''
for s in str1:
    reverse_str1 = s + reverse_str1

print(str1)
print(reverse_str1)

 

2. 파이썬 리스트 reverse 활용

str1 = 'hello world'
str_list = list(str1)
str_list.reverse()
str2 = ''.join(str_list)

print(str1)
print(str2)

 

3. [::-1] 문자열 슬라이싱 활용

str1 = "hello World"
str2 = str1[::-1]
print(str1)
print(str2)

 

와 같은 3가지 방법이 존재한다.

 

해당 문제의 풀이에서는 2번 방법을 활용했다.