알고리즘
[알고리즘] 문자열 폭발 - 구현
j9972
2024. 7. 12. 22:19
728x90
1. 문제
https://www.acmicpc.net/problem/9935
2. 풀이
1. 문제의 핵심은 시간복잡도!
2. 실패코드
- 기본적인 slicing을 통해 코드를 구할 수 있음
- n의 범위를 따질 때, O(n * ( n - len(boom) ) + slicing으로 나오는 시간복잡도. => 기준 초과
=> 1%에서 시간초과가 난다
3. 성공코드
- stack에 담아가며 stack의 길이가 len(boom)이상이며, stack[-len(boom):] 이 boom이랑 같을때마다 pop()
-> O(N)의 시간복잡도를 갖는다는 걸 알 수 있다.
3. 코드
1. 시간 초과 코드
string = input()
boom = input()
b = len(boom)
while True:
flag = False
if string == "":
print("FRULA")
break
for i in range(len(string)-b+1):
if string[i:i+b] == boom:
string = string[:i] + string[i+b:]
flag = True
break
if not flag:
print(string)
break
2. 성공 코드
string = input()
boom = input()
b = len(boom)
st = []
for i in string:
st.append(i)
if len(st) >= b and ''.join(st[-b:]) == boom:
for _ in range(b):
st.pop()
if len(st) == 0:
print("FRULA")
else:
print(''.join(st))