코딩하는 베어브릭
백준 9935번. 문자열 폭발 (파이썬) 본문
문제
https://www.acmicpc.net/problem/9935
9935번: 문자열 폭발
첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모
www.acmicpc.net
문제 풀이
폭탄 문자열이 입력 문자열에 없을 때까지 replace함수를 이용해 폭탄문자열을 ''로 대체했다.
하지만 시간초과가 났다... 아무래도 내장함수를 사용하는 것이 시간이 오래 소요되는 것 같다.
import sys
s=input()
bomb=input()
while bomb in s:
s=s.replace(bomb,'')
if s=='':
print('FRULA')
else:
print(s)
그래서 replace 함수를 사용하지 않고, 스택을 사용해 폭탄 문자열을 찾아서 없애주었다.
1. 입력받은 문자열을 스택에 하나씩 저장한다.
2. 이 때, 시간복잡도를 줄이기 위해서 폭탄문자열의 첫번째부터 일치하는 지 따지는 것이 아니라 마지막번째와 일치하는 지 체크한다.
3. 마지막번째 문자와 일치하는 경우에만, 폭탄문자열 전체와 일치하는 지 비교해주면 되기 때문에 시간복잡도를 줄일 수 있다.
4. 폭탄문자열과 일치한다면, 스택에서 폭탄문자열의 길이만큼 pop을 해준다.
import sys
s=input()
bomb=list(input())
l=len(bomb)
stack=[]
for x in s:
stack.append(x)
if x==bomb[-1]:
if bomb==stack[-l:]:
for _ in range(l):
stack.pop()
if stack==[]:
print('FRULA')
else:
print(''.join(stack))
'알고리즘 > 백준' 카테고리의 다른 글
| 백준 18870번. 좌표 압축 (파이썬) (0) | 2022.08.11 |
|---|---|
| 백준 11866번. 요세푸스 문제 0 (파이썬) (0) | 2022.07.02 |
| 백준 13900번. 순서쌍의 곱의 합 (파이썬) (0) | 2022.07.01 |
| 백준 9012번. 괄호 (파이썬) (0) | 2022.06.28 |
Comments