문제
5397번: 키로거
첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한줄로 이루어져 있고, 강산이가 입력한 순서대로 길이가 L인 문자열이 주어진다. (1 ≤ L ≤ 1,000,000) 강산이가 백스페이스를 입
www.acmicpc.net
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