문제 링크
https://www.acmicpc.net/problem/1406
처음에 잘못 짠 코드
import sys
string = list(sys.stdin.readline().rstrip())
M = int(sys.stdin.readline().rstrip())
N = len(string)
cursor = len(string)
for i in range(M):
command = list(sys.stdin.readline().split())
if command[0] == "L":
if cursor != 0:
cursor -= 1
elif command[0] == "D":
if cursor < len(string):
cursor += 1
elif command[0] == "B":
if cursor > 0:
string.remove(string[cursor-1])
cursor -= 1
elif command[0] == "P":
string.insert(cursor,command[2])
cursor += 1
for s in string:
print(s, end="")
이렇게 짰더니 시간 초과가 나왔다.
그래서 다른 사람들의 풀이를 찾아보았고 풀이를 이해하고 제출하였다.
위에서 사용한 insert, remove의 시간 복잡도는 O(N)이다. 이 메서드들을 사용해서 시간 초과가 나왔기 때문에,
시간 복잡도가 O(1)인 append, pop을 사용해야 한다.
정답 코드
import sys
stack1 = list(sys.stdin.readline().rstrip())
stack2 = []
M = int(sys.stdin.readline().rstrip())
for i in range(M):
command = list(sys.stdin.readline().split())
if command[0] == "L":
if stack1:
stack2.append(stack1.pop())
elif command[0] == "D":
if stack2:
stack1.append(stack2.pop())
elif command[0] == "B":
if stack1:
stack1.pop()
elif command[0] == "P":
stack1.append(command[1])
stack = stack1 + list(reversed(stack2))
print("".join(stack))
728x90
'파이썬 알고리즘 문제 풀이' 카테고리의 다른 글
Baekjoon Online Judge 10430번 파이썬 (0) | 2022.06.29 |
---|---|
Baekjoon Online Judge 1158번 파이썬 (0) | 2022.06.29 |
Baekjoon Online Judge 11656번 파이썬 (0) | 2022.06.27 |
BaekJoon Online Judge 10824번 파이썬 (0) | 2022.06.24 |
BaekJoon Online Judge 11655번 파이썬 (0) | 2022.06.24 |