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 함수는 매개변수로 들어온 리스트에 있는 요소 하나하나를 합쳐서 하나의 문자열로 바꾸어 반환하는 함수입니다.
'Coding Test' 카테고리의 다른 글
[Leetcode] 17. Letter Combinations of a Phone Number (0) | 2022.06.24 |
---|---|
[Leetcode] 3. Longest Substring Without Repeating Characters (0) | 2022.05.21 |
[백준] 9012.괄호 (0) | 2022.04.05 |
[LeetCode]121.주식을 사고팔기 가장 좋은 시점(Best Time to Buy and Sell Stock) (0) | 2022.02.18 |
[LeetCode]238.자신을 제외한 배열의 곱 (0) | 2022.02.16 |