알고리즘 문제(SOL)

[백준/5397/파이썬] 키로거

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

 

5397번: 키로거

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

www.acmicpc.net

조건

  • 창영이는 강산이의 비밀번호를 훔치려고함
  • 강산이가 비밀번호 창에서 입력한 키가 주어졌을 때, 강산이의 비밀번호를 알아내는 프로그램을 작성하시오.
  • 강산이는 키보드로 입력한 키는 알파벳 대문자,소문자,숫자,백스페이스,화살표이다.
  • 화살표 : < , > ( 이때, 커서의 위치를 움직일 수 있다면, 왼쪽 또는 오른쪽으로 한 칸 움직인다)
  • 백스페이스: -
  • 만약, 커서의 위치가 줄의 마지막이 아니라면, 커서 및, 커서 오른쪽에 있는 모든 문자는 오른쪽으로 한칸 이동한다.

입력

<<BP<A>>Cd-

BAPC

SOL)

이거! editor에서, 윤디님이 가르쳐주신 개념 이용하면 될거같음!

스택을 양옆에 두고, 마우스 중간에 커서가 있는것처럼 양옆을 왔다갔따 , 거리면서 POP,PUSH해주면됨!

  1. 스택이 비어있고 , 입력이 알파뱃이라면 → stk의 왼쪽에 일단 넣는다.

항상 키보드 커서는 입력의 오른쪽에 위치하니까.

2. 스택이 비어있지 않다면, 경우를 나눠야한다.

  • '<' 이면 , 왼쪽stack의 TOP에 있는 알파벳을 오른쪽으로 PUSH. (근데 ,이때, 왼쪽 스택이 비어있다면, 무시합니다)
  • '>' 이면, 오른쪽stack의 TOP 있는 알파벳을 왼쪽으로 PUSH.(근데, 이떄, 오른쪽 스택이 비어있다면, 무시합니다)
  • 'd'이면, 왼쪽 TOP에 있는걸 삭제합니다.

stkleft와 stkright를 딱 붙여서 , 출력하면 답이 될거같다.

 

import sys
from collections import deque
input=sys.stdin.readline
n = input()
stk_left=[]
stk_right=deque([])


for i in range(n):
	word = input().strip()

for pw in word:
	if pw.isaplha():
		stk_left.append(pw)
	else:
			if stk_left and pw ='<' :
				stk_right.appendleft(stk_left.pop())
			elif stk_right and pw='>':
				stk_left.append(stk_right.popleft())
			elif stk_left and pw = 'd':
				stk_left.pop()
			else:
					continue

left=''.join(stk_left)
right=''.join(stk_right)
answer=''.join(stk_left,stk_right)
#이렇게 풀면되지 않을까?