word = input()
boom = list(input())
stack = []
count = 0
for i in range(len(word)) :
stack.append(word[i])
if len(stack) >= len(boom) :
if stack[len(stack) - len(boom) :] == boom :
for i in range(len(boom)) :
del stack[-1]
if stack == [] :
print('FRULA')
else :
print("".join(stack))
|
stack이 boom보다 짧을 동안에는, stack이 boom과 같아질 리가 없으므로 무조건 다음 글자를 넣는다.
stack의 길이가 boom 이상일 때에는 stack의 뒤 len(boom)개의 원소를 boom과 비교한다.
boom과 같다면 boom의 길이만큼 stack을 del하여 같은 부분을 전부 삭제한다.
한 글자만 추가되어도 원래부터 있던 -len(boom)개의 스택을 다 체크하므로,
boom의 삭제로 인해 새로 boom이 된 문자열도 다음번 체크에서 바로 삭제가 된다.
즉 for문을 한바퀴만 돌려도 모든 boom이 사라진다.
word의 모든 원소에 대해 for문이 한바퀴 돌고 나서도 stack에 남아있는 원소들이 정답이므로, 이를 출력한다.
'Week 01 ~ 04 : 알고리즘 문제 풀이' 카테고리의 다른 글
파이썬 백준 1933 스카이라인 (스택을 손절한) (0) | 2021.11.19 |
---|---|
파이썬 백준 1933 스카이라인 (스택과 큐를 곁들인) (0) | 2021.11.19 |
파이썬 백준 5904 Moo 게임 (0) | 2021.11.18 |
파이썬 백준 13705 Ax+Bsin(x)=C (0) | 2021.11.17 |
파이썬 백준 3955 캔디 분배 (0) | 2021.11.17 |