https://www.acmicpc.net/problem/5397
조건
- 창영이는 강산이의 비밀번호를 훔치려고함
- 강산이가 비밀번호 창에서 입력한 키가 주어졌을 때, 강산이의 비밀번호를 알아내는 프로그램을 작성하시오.
- 강산이는 키보드로 입력한 키는 알파벳 대문자,소문자,숫자,백스페이스,화살표이다.
- 화살표 : < , > ( 이때, 커서의 위치를 움직일 수 있다면, 왼쪽 또는 오른쪽으로 한 칸 움직인다)
- 백스페이스: -
- 만약, 커서의 위치가 줄의 마지막이 아니라면, 커서 및, 커서 오른쪽에 있는 모든 문자는 오른쪽으로 한칸 이동한다.
입력
<<BP<A>>Cd-
BAPC
SOL)
이거! editor에서, 윤디님이 가르쳐주신 개념 이용하면 될거같음!
스택을 양옆에 두고, 마우스 중간에 커서가 있는것처럼 양옆을 왔다갔따 , 거리면서 POP,PUSH해주면됨!
- 스택이 비어있고 , 입력이 알파뱃이라면 → 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)
#이렇게 풀면되지 않을까?
'알고리즘 문제(SOL)' 카테고리의 다른 글
[백준/17289/파이썬] 오큰수 (0) | 2021.12.16 |
---|---|
[백준/7785/파이썬] 회사에 있는 사람 (0) | 2021.12.16 |
[백준/1715/파이썬] 카드 정렬하기 (0) | 2021.12.16 |
[백준/2075/파이썬] N번째 큰 수 (0) | 2021.12.16 |
[백준/3986/파이썬] 좋은 단어 (0) | 2021.12.16 |