본문 바로가기

Coding Test

[백준] 9935. 문자열 폭발

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

 

9935번: 문자열 폭발

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

www.acmicpc.net

파이썬 풀이

 

문자열 중복 문제는 "스택"을 사용하면 매우 편리합니다.

 

1. 입력된 문자열(string)을 한 글자(char)씩 스택에 push 

2. 현재 글자가 폭발 문자열의 마지막 글자와 일치하면 스택의 top부터 폭발문자열과 일치하는지 확인

3. 폭발문자열이 만들어진다면 폭발문자열만큼 스택에서 pop

4. 1~3 반복

5. 스택이 비어있으면 FRULA를 출력, 비어있지 않다면 스택 속 문자열을 차례로 출력

 

inputString = input() 
deleteString = input() 

lastChar = deleteString[-1] 
stack = [] 
size = len(deleteString) 

for i in inputString: 
	stack.append(i) 
    
    if i == lastChar and ''.join(stack[-size:]) == deleteString: 
    	del stack[-size:]
        
        if stack: 
        	print(''.join(stack)) 
            
        else: 
        	print("FRULA")

 

대부분 이 알고리즘을 사용해서 풀었는데, 좀 더 간단하고 빠른 방법이 있더군요.

스택을 사용하는 개념은 똑같습니다.

다만 폭발문자열의 끝문자와 같은지 비교하는 과정을 없애서 푸는게 더 빠르네요.

 

s=input()
k=input()
n=len(k); stack=[]; kk=list(k)
for x in s:
    stack.append(x)
    if stack[-n:]==kk:
        del stack[-n:]
print(''.join(stack)) if stack else print('FRULA')

 

 

  • join 함수

join 함수는 매개변수로 들어온 리스트에 있는 요소 하나하나를 합쳐서 하나의 문자열로 바꾸어 반환하는 함수입니다.