-
[알고리즘] 문자열 폭발 - 구현알고리즘 2024. 7. 12. 22:19728x90
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))
'알고리즘' 카테고리의 다른 글
[알고리즘] 월드컵 - 백트래킹 (0) 2024.07.07 [알고리즘] 사탕게임 - dfs (0) 2024.06.13 [알고리즘] 빗물 - 구현 (0) 2024.06.12 [알고리즘] 미세먼지 안녕 - bfs/구현 (2) 2024.03.22 [ 알고리즘 ] 아기상어 - bfs (0) 2024.03.21