CodingTest/Baekjoon

[baekjoon] 백준 5397번(파이썬): 키로거

JunJangE 2021. 10. 4. 13:50

문제

 

5397번: 키로거

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

www.acmicpc.net

알고리즘

- 테스트 케이스만큼 반복한다.

- 반복문을 통해 강산이의 입력 순서를 확인한다.

- 커서 기준으로 res 리스트는 왼쪽에 있는 입력, stack 리스트는 오른쪽에 있는 입력이다.

- 커서 기준에 따라 입력을 수행해준다.

코드

import sys

t = int(sys.stdin.readline())

# 테스트 케이스만큼 반복
for _ in range(t):
    l = list(map(str, sys.stdin.readline().strip()))
    stack = []
    res = []

    # 반복문을 통해 강산이의 입력 순서를 확인
    for i in l:
        # 입력이 "-" 이고 res 리스트에 요소가 있으면 res 리스트를 팝한다.
        if i == "-":
            if res:
                res.pop()

        # 입력이 "<" 이고 res 리스트에 요소가 있으면 res 리스트를 팝하고 팝한 것을 stack 리스트에 추가
        elif i == "<":
            if res:
                stack.append(res.pop())

        # 입력이 ">" 이고 stack 리스트에 요소가 있으면 stack 리스트를 팝하고 팝한 것을 res 리스트에 추가
        elif i == ">":
            if stack:
                res.append(stack.pop())

        # 그 외 입력은 res 리스트에 추가
        else:
            res.append(i)

    # 반복문을 통해 모든 입력을 확인한 후에는 두개의 리스트를 합쳐준다.
    while stack:
        res.append(stack.pop())

    print("".join(res))

github

 

GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com