문제
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