Baekjoon 9935.py [문자열 폭발]

문제가 궁금하다면?

내 풀이

import sys
input = sys.stdin.readline

word = input().rstrip()
bomb = input().rstrip()
stk = []
lw, lb = len(word), len(bomb)

for i in word:
    stk.append(i)
    if len(stk) >= lb and ('').join(stk[-lb:]) == bomb:
        for _ in range(lb):
            stk.pop()

if stk:
    print(('').join(stk))
else:
    print('FRULA')

풀이 복기

아무리 생각해도 풀이방법이 생각안나서 알고리즘 분류에서 스택을 사용하는걸 확인했다. 스택을 보자마자 풀이가 생각나서 풀었다.
문자를 하나씩 스택에 넣으면서 마지막 문자가 폭발문자면 그 길이만큼 pop()했다.

다른 풀이를 보며

if len(stk) >= lb and ('').join(stk[-lb:]) == bomb:
위 조건문에서 len(stk) >= lb는 없어도 되는거라 빼는게 좋음.

if i == lastChar and ('').join(stack[-length:]) == bomb:
and를 사용했기때문에 조건문을 이런식으로 바꾸는게 더 효율적이다.

앞 조건을 확인하고 아니면 넘어가기때문에 뒤 조건인 ('').join(stack[-length:]) == bomb:는 확인하지 않는 경우가 더 많아진다.

시간이 훨씬 짧아진걸 확인할 수 있다.
꼭 필요한 조건이 아니면 넣지말고, 시간이 짧게걸리는 조건문을 활용하자.

좋은 웹페이지 즐겨찾기