문제출처: https://www.acmicpc.net/problem/9935
9935번: 문자열 폭발
첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모
www.acmicpc.net
1. 문제 접근 방식
처음엔 쉽게 풀고 싶어서 replace를 이용해 해결하려고 했지만 역시나 시간초과가 발생했다.
따라서 스택을 이용해 푸는 방법으로 선회했다...
스택에 a를 삽입하면서 a와 b의 길이가 같아질 때에 문자열을 비교하는 방법으로 해결했다.
2. 내가 푼 코드
<시간 초과>
#시간 초과 코드
import sys
a = sys.stdin.readline().strip()
b = sys.stdin.readline().strip()
while b in a:
a=a.replace(b,'')
if a:
print(a)
else:
print('FRULA')
<새로 푼 코드>
import sys
a = sys.stdin.readline().strip()
b = sys.stdin.readline().strip()
arr=[]
tick = len(b)
for i in a:
arr.append(i)
if b[-1] == i and ''.join(arr[-tick:]) == b:
del arr[-tick:]
if arr:
print(''.join(arr))
else:
print('FRULA')
3. 결과 및 느낀점
시간 초과가 발생하면 기존의 풀이와 다른 새로운 풀이를 빠르게 생각해낼 필요가 있다.
del 메소드를 사용하면 슬라이싱해서 리스트를 삭제할 수 있다.
스택을 적재적소에 사용하자.
리스트를 문자열로 변환하는 join메소드에 익숙해지자.
'[Boj문제풀이]' 카테고리의 다른 글
[Boj/백준] 3135 Python (0) | 2021.08.25 |
---|---|
[Boj/백준] 11508 Python (0) | 2021.08.24 |
[Boj/백준] 11501 Python (0) | 2021.08.23 |
[Boj/백준] 1181 Python (0) | 2021.08.23 |
[Boj/백준] 4889 Python (0) | 2021.08.21 |