728x90

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

 

9935번: 문자열 폭발

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

www.acmicpc.net

 

 

# 조건

  • 폭발 문자열이 폭발하면 그 문자는 문자열에서 사라지며, 남은 문자열은 합쳐진다.
  • 폭발은 아래와 같은 과정으로 진행된다.
    • 문자열이 폭발 문자열을 포함하고 있는 경우, 모든 폭발 문자열이 폭발하게 되고
    • 남은 문자열을 순서대로 이어 붙여 새로운 문자열을 만든다.
    • 새로 생긴 문자열에 폭발 문자열이 포함되어 있을 수도 잇다.
    • 폭발은 폭발 문자열이 문자열에 없을 때까지 계속된다.
  • 모든 폭발이 끝난 후 어떤 문자열이 남는지 구해보려고한다.
  • 남아 있는 문자가 없는 경우 "FRULA"를 출력
 

# 접근 방법

  • 자료 구조 중 스택을 이용하여 풀어주면 될 것 같다.
  • 폭발 문자열의 마지막 글자가 들어온다면, 스택을 검사해주면 될 것 같다.
    • 이 때, 검사는 슬라이싱을 이용해준다.
    • 범위는 - (폭발 문자열의 길이) : 로 해준다.
  • 만약 폭발 문자열이 완성되어 있다면, 길이만큼 pop을 해주고 아니라면 다시 append 해준다.
import sys  
sys.stdin = open('input.txt')  
input = sys.stdin.readline  
  
string = list(input().rstrip())  
target = list(input().rstrip())  
  
stack = []  
for i in string:  
    cnt = 0  
    stack += i  
    if i == target[-1]:  
        if target == stack[-len(target):]:  
            while cnt < len(target):  
                stack.pop()  
                cnt+=1  
  
if stack:  
    print(*stack, sep='')  
else:  
    print('FRULA')
728x90