동주의 세상

Clean and minimal personal blog

백준 9935 문자열 폭발 파이썬 풀이 해설

Posted at — Aug 1, 2022

접근

  1. 주어진 문자열의 각 문자를 결과 문자열(ans)에 추가한다.
  2. 만약 ans[-1] 이 폭발 문자열의 마지막 bomb[-1] 과 같다면 ans[-len(bomb):] 과 bomb[:] 을 비교하여 같으면 폭발시킨다.

사고

worst case time complexity 가 10**6 이길래 O(n) 으로 되는 문제인가 고민했다. 넉넉히 된다. 조건을 이해했을때 ‘모든 폭발 문자열이 폭발하고 새로운 문자열이 생긴다’ 여서 폭발 문자열을 발견할때마다 폭발하는거랑 결과가 혹시 다른가 고민해보았다. 반례가 떠오르지 않아 O(n) 스택으로 풀었다.

한가지 처음에 arr = arr[0:arr - len(bomb)] 이렇게 넣었다가 TLE 떴다. 저렇게 넣어도 파이썬이 optimization 하지 않을까 했는데 정직하게 주어진 인덱스만큼 복사하는것 같다. pop으로 뒤에 있는 문자열을 날리는 방법으로 풀어야 한다.

import sys
input = sys.stdin.readline
given = input().strip()
bomb = list(input().strip())
size = len(bomb)

arr = []
for i in range(len(given)):
    arr.append(given[i])

    if arr[-1] == bomb[-1]:

        if len(arr) - size >= 0 and arr[len(arr) - size:] == bomb[:]:

            arr = arr[:len(arr) - size]

if not arr:
    print("FRULA")
else:
    print(''.join(arr))

solution