하루일문
[백준] 1406번 에디터(파이썬) 본문
문제
1406번: 에디터
첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수
www.acmicpc.net
포인트
제한시간이 촉박한 문제로 한번 풀었는데 시간 초과가 나서 아무리 생각해도 다른 방법이 생각이 안나서 다른 사람 코드를 보고 힌트를 얻어서 다시 만들었다.
풀이
# 시간 초과가 남
import sys
input = sys.stdin.readline
word = list(input().strip())
n = int(input().strip())
cursor = len(word)
for _ in range(n):
m = input().strip()
if "L" in m:
if cursor > 0:
cursor -= 1
elif "D" in m:
if cursor < len(word):
cursor += 1
elif "B" in m:
if cursor-1 >= 0:
word.pop(cursor-1)
if cursor > 0:
cursor -= 1
else:
word.insert(cursor, m[2])
cursor += 1
print(*word, sep="")
이 코드는 insert를 사용해서 시간이 초과가 났다.
import sys
input = sys.stdin.readline
word = list(input().strip())
word2 = []
n = int(input().strip())
for _ in range(n):
m = input().strip()
if "L" in m:
if word:
word2.append(word.pop())
elif "D" in m:
if word2:
word.append(word2.pop())
elif "B" in m:
if word:
word.pop()
else:
word.append(m[2])
word2 = reversed(word2)
print(*word, *word2, sep="")
해설
이 코드는 stack을 두개를 사용해주고 그 스택을 합치는 코드였다. 여기서 커서를 옮길때마다 word의 끝이 바뀌도록 해주고 word2에는 반대로 들어가기때문에 reversed를 걸어준다.
예를 들어
dmih에 L라면
word = [d, m, i], word2 = [h] 이렇게 변경이 된다.
'algorithm > baekjoon' 카테고리의 다른 글
[백준] 1158 큐 (파이썬) (0) | 2023.03.04 |
---|---|
[백준] 10854 큐 (파이썬) (0) | 2023.03.04 |
[백준] 1874번 스택 수열 (파이썬) (0) | 2023.03.02 |
[백준] 25501 재귀의 귀재(파이썬) (0) | 2023.03.01 |
[백준] 17478번 재귀함수가 뭔가요? (파이썬) (0) | 2023.02.28 |