본문 바로가기
알고리즘/자료구조

[백준][Python] 5397번 키로거

by 임짠짠 2022. 2. 15.
반응형
 

5397번: 키로거

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

www.acmicpc.net

 

코드

from collections import deque
import sys
n = int(input())

for i in range(n):
    left = deque([])
    right = deque([])
    index = 0
    inp = list(sys.stdin.readline().rstrip())
    for j in inp:
        if j == '<':
            if len(left)>0:
                right.appendleft(left.pop())
        elif j == '>':
            if len(right)>0:
                left.append(right.popleft())

        elif j == '-':
            if len(left)>0:
                left.pop()
        else:
            left.append(j)
        
    answer = "".join(left)+"".join(right)

    print(answer)

 

설명

커서를 기준으로 왼쪽과 오른쪽 deque를 만들었다.

만약 '<'가 나오면 커서가 왼쪽으로 이동해야 하기 때문에 left에 값이 들어있으면 가장 끝에 있는 값을 right.appendleft()를 이용하여 right의 가장 앞쪽에 push 해준다.

만약 '>'가 나오면 위와 반대로 right에 값이 들어있으면 가장 앞에 있는 값을 꺼내 left의 가장 끝에 push 해준다.

'-'가 나왔을 경우는 left에 값이 있는지 확인하여 만약에 있으면 pop을 해준다. 

그 외의 경우는 모두 비밀번호의 일부이므로 left에 push를 해준다.

마지막에는 join함수를 이용하여 left와 right의 값들을 합쳐서 출력해주었다. 

반응형

댓글