[백준 1406 파이썬] - 에디터

zsunny·2022년 7월 24일
1
post-thumbnail

📌 문제

💯 정답

import sys

stack_l = list(input()) # 커서 기준 왼쪽
stack_r = []            # 커서 기준 오른쪽
n = int(input())

for i in range(n):
    order_list = sys.stdin.readline().split()
    order = order_list[0]
    if order == "L" and stack_l:        # L이고 왼쪽에 값이 있으면(True면)
        stack_r.append(stack_l.pop())   # 왼쪽 값 pop해 오른쪽에 넣음
    elif order == "D" and stack_r:      # D이고 오른쪽에 값이 있으면(True면)
        stack_l.append(stack_r.pop())   # 오른쪽 값 pop해 왼쪽에 넣음
    elif order == "B" and stack_l:      # B이고 왼쪽에 값이 있으면(True면)
        stack_l.pop()                   # 왼쪽 값 삭제
    elif order == "P":                  # P면
        stack_l.append(order_list[1])   # 왼쪽에 입력 받은 값 추가

print("".join(stack_l + list(reversed(stack_r))))   # 오른쪽 리스트는 역순해서 붙여줘야 함

📝 설명

• 커서의 처음 위치가 오른쪽 끝이므로 
  입력받는 문자열을 왼쪽 스택에 리스트로 만들고 오른쪽 스택에 빈리스트를 만든다.
  즉, 이제 커서를 기준으로 왼쪽은 stack_l 이고 오른쪽은 stack_r 에 값을 넣는다.
• L이고 왼쪽에 값이 있으면 왼쪽 값을 pop해 오른쪽에 넣음으로써 커서의 왼쪽 이동을 표현한다.
• D일때와 B일때도 이와 같이 표현한다.
• P일때는 P옆에 입력받은 값을 가져다 왼쪽 스택에 추가한다.

🙏 참고

👉 [백준] 에디터 1406번 파이썬 Python 자료구조

profile
매일 성장하는 예비 웹 개발자 🌱

0개의 댓글