백준 5397 키로거 파이썬

문제

 

5397번: 키로거

첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한줄로 이루어져 있고, 강산이가 입력한 순서대로 길이가 L인 문자열이 주어진다. (1 ≤ L ≤ 1,000,000) 강산이가 백스페이스를 입

www.acmicpc.net

 

Screen Shot 2021-11-04 at 8.45.57 PM.png

 

1차 시도)

왼쪽에 값이 없고 < 이 들어오거나, 오른쪽에 값이 없고 > 이 들어왔을 때의 처리를 잘못해줘서 런타임 에러 발생.

elif j not in {'<', '>', '-'}:
left.append(j)

이걸 추가해서 처리해주었다.

 

2차 시도)

계속 런타임 에러만 뜨다가 시간 초과가 떴는데, 리스트에서 자꾸 뭘 움직이고 넣고 하는 것 때문이었다.

스택으로 바꿔주면서 해결!

 

최종)

왼쪽, 오른쪽 스택을 만들어서 커서가 있다고 가정하고 시작

문자가 들어오면 왼쪽 스택에 추가하고, 방향키가 들어오면 그에 따라 왼쪽, 오른쪽 스택에서 하나씩 pop해 반대쪽에 넣어주면 된다.

 

# 키로거
# 커서 문제는 스택!! 시간 초과 그만~~
import sys
t = int(input())
for i in range(t):
word = list(sys.stdin.readline().rstrip())
left = []
right = []
for j in word:
if j == '<' and left:
right.append(left.pop())
elif j == '>' and right:
left.append(right.pop())
elif j == '-' and left:
left.pop()
elif j not in {'<', '>', '-'}:
left.append(j)
print(f"{''.join(left)}{''.join(right[::-1])}")

 

 

참고한 블로그

https://qwlake.github.io/algorithm/2020/07/12/algorithm-baekjoon-5397/

 

백준 5397번 - 키로거 - qwlake's Blog

5397 - 키로거

qwlake.github.io