본문 바로가기
Python 알고리즘 공부/백준 알고리즘 공부

9935: 문자열 폭발 (python)

by 두 그루 2023. 3. 23.

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

 

9935번: 문자열 폭발

첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모

www.acmicpc.net

 

# 9935
# 문자열 폭발
from collections import deque

string = input()
popping_string = list(input())
last_ch = popping_string[-1]

que = deque([])

for i in range(len(string)):
    if string[i] == last_ch and len(que) >= len(popping_string) - 1: # 폭발 문자의 마지막 글자와 같고, 앞의 글자들까지 확인할 정도의 길이가 된다면
        # 폭발 문자와 같은지 확인하기
        check = False
        for j in range(1, len(popping_string)):
            if que[len(que) - j] != popping_string[len(popping_string) - 1 - j]:
                break
        else:
            check = True
        if check is True: # 폭발 문자와 같다면 삭제
            for j in range(len(popping_string) - 1):
                que.pop()
        else: # 폭발 문자가 아니라면 추가
            que.append(string[i])
    else:
        que.append(string[i])

if que:
    print("".join(que))
else:
    print("FRULA")

 

코드 설명

  1. 입력받은 문자열의 문자를 앞에서부터 하나씩 확인한다.
  2. 만약 문자가 폭발 문자열의 마지막 문자와 동일하지 않다면, deque(stack으로 이용)의 자료에 추가한다.
  3. 만약 문자가 폭발 문자열의 마지막 문자와 동일하다면, 이전의 문자도 확인하여 폭발 문자열과 같은지 확인한다.
  4. 폭발 문자열과 같은 문자열을 발견하면 stack에서 삭제한다.
  5. 모든 확인이 끝난 후 stack의 문자를 출력한다.
  6. stack에 남은 문자가 없다면 "FRULA"를 출력한다.

댓글