꾸준히 합시다

백준 파이썬 5397번: 키로거 본문

코딩 테스트 문제 풀이

백준 파이썬 5397번: 키로거

tturbo0824 2021. 3. 8. 00:31

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

 

5397번: 키로거

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

www.acmicpc.net

문제 유형: 스택, 구현

 

# Solution 1

n = int(input())

for _ in range(n):
    left = []
    right = []
    cmd = input()
    
    for i in cmd:
        if i == '<':
            if left:
                right.append(left.pop())
        elif i == '>':
            if right:
                left.append(right.pop())
        elif i == '-':
            if left:
                left.pop()
        else:
            left.append(i)
    left.extend(reversed(right))
    
    print(''.join(left))

백준 1406번과 유사한 문제다. 이 문제도 커서를 기준으로 왼쪽, 오른쪽을 나눠서 스택을 구현해야 한다.

 

  1. 입력 값이 '<'인 경우 왼쪽 리스트의 마지막 아이템을 오른쪽으로 보내준다. 단 왼쪽 리스트가 빈 리스트가 아니어야 실행 가능하다. 왼쪽 리스트가 비어있다면 아무 일도 일어나지 않는다.
  2. 입력 값이 '>' 경우 반대로 오른쪽 리스트 제일 마지막 아이템을 왼쪽 리스트로 보내준다. 마찬가지로 오른쪽 리스트가 비어있다면 아무 일도 일어나지 않는다.
  3. 이렇게 실행했을 시 오른쪽 리스트의 순서가 반대로 정렬되기 때문에 마지막 결과를 출력할 때는 reversed()를 이용해 오른쪽 리스트를 뒤집어주고 왼쪽 리스트와 합친다.

 

Comments