알고리즘/문제풀이

[Python] 백준 5397 키로거

정찡이 2021. 9. 28. 13:38
728x90

1. 문제 링크

https://www.acmicpc.net/problem/5397

 

5397번: 키로거

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

www.acmicpc.net


2. 문제 요약

비밀번호를 출력한다.


3. 아이디어 정리

  • 그대로 구현해준다.
  1. < 인 경우 범위 확인하고 now - 1
  2. 인 경우 범위 확인하고 now + 1
  3. -인 경우 now 앞에 있는 수를 제거한다.
  4. 그 외는 비밀번호이기 때문에 현재 위치에 넣어준다.

4. 문제 풀이

4-1. 내 풀이

import sys
from collections import deque

for _ in range(int(sys.stdin.readline())):
    l = sys.stdin.readline().rstrip()
    result = deque()
    now = 0
    for c in l:
        if c == '<':
            if now > 0:
                now -= 1
        elif c == '>':
            if len(result) > now:
                now += 1
        elif c == '-':
            if result and now >= 1:
                del result[now - 1]
                now -= 1
        else:
            result.insert(now, c)
            now += 1
    print(''.join(result))

 


5. 결론

  • 덱을 이용한다.