[백준] 5397번 키로거

거북이·2023년 1월 26일
0

백준[실버2]

목록 보기
23/81
post-thumbnail

💡문제접근

  • 이전 포스팅에 있었던 [[백준] 1406번 에디터 ★]와 동일한 유형의 연결 리스트 문제였다. 커서 기준 왼쪽 스택과 커서 기준 오른쪽 스택 두 개의 스택을 만들어서 코드를 작성했다.

💡코드(메모리 : 50848KB, 시간 : 1476ms)

import sys
input = sys.stdin.readline

T = int(input().strip())
for _ in range(T):
    cursor_left_stack = []
    cursor_right_stack = []
    password = list(input().strip())
    for i in range(len(password)):
        if password[i] == "<":
            if cursor_left_stack:
                cursor_right_stack.append(cursor_left_stack.pop())
        elif password[i] == ">":
            if cursor_right_stack:
                cursor_left_stack.append(cursor_right_stack.pop())
        elif password[i] == "-":
            if cursor_left_stack:
                cursor_left_stack.pop()
        else:
            cursor_left_stack.append(password[i])
    cursor_right_stack = reversed(cursor_right_stack)
    cursor_left_stack.extend(cursor_right_stack)
    print(''.join(cursor_left_stack))

💡테스트케이스

입력

1
<BP<A>>Cd-

출력

BAPC

💡변화 과정 설명

명령어커서 기준 왼쪽 스택커서 기준 오른쪽 스택
<xx
<xx
BBx
PBPx
<BP
ABAP
>BPA
>xPAB
CCPAB
dCdPAB
-CPAB
  • 결과 : 커서 기준 오른쪽 스택을 뒤집고 커서 기준 왼쪽 스택에 extend처리해줘서 join()하면 된다.

💡소요시간 : 15m

0개의 댓글