++/자료구조&알고리즘

[baekjoon] 5397. 키 로거

writtenbyrla 2024. 1. 8. 20:10

✅ 문제

 


✅ 풀이

이 문제는 하나의 커서로 이동하는 특징을 고려해서, 스택으로 풀 수 있다.

💡 Point
* 일반 문자, 왼쪽 커서 이동('<'), 오른쪽 커서 이동('>'), 백 스페이스('-') 네 가지 조건 나누기
  1. 일반 문자: pwd 배열에 그대로 입력
  2. 백 스페이스: pwd 배열에서 마지막 글자 제거 - 스택의 pop() 이용
  3. 왼쪽 커서 이동 - 현재 커서가 있는 곳중간부터 입력이 들어가야 하므로 오른쪽 문자를 제거해놓아야 함
      1) pwd의 마지막 글자를 제거하여 임의의 배열(cursor)에 담아 놓고,
      2) 다른 연산이 끝난 후 다시 뒤에다가 붙이기(붙일 땐 거꾸로)
  4. 오른쪽 커서 이동 - 임의의 배열에 담아둔 글자가 있다면 그 글자 다음에 새로운 문자를 입력받아야 함
      1) cursor의 마지막 글자를 제거하여 pwd 배열 마지막 요소로 붙임

* 입력받은 문자에 대한 연산이 끝난 후 cursor 배열에 남은 요소를 pwd 배열 마지막에 역순으로 이어 붙임
T = int(input())

for _ in range(T):
    pwd = []
    cursor = []
    word = input()

    for i in word:
        if i == '-':
            if pwd:
                pwd.pop()
        elif i == '<':
            if pwd:
                cursor.append(pwd.pop())
        elif i == '>':
            if cursor:
                pwd.append(cursor.pop())
        else:
            pwd.append(i)
    pwd.extend(reversed(cursor))
    
    print(''.join(pwd))