728x90
https://www.acmicpc.net/problem/5397
커서를 이동하는 부분에서 이전에 풀었던 1406번(에디터) 문제가 생각났다. 왼쪽으로 커서를 움직일때 다른 스택에 가장 위 값을 넣고 커서를 오른쪽으로 옮기면 다른 스택에서 원래 스택으로 다시 옮겨오는 방식이다. 이렇게 하면 append와 pop만 사용하기 때문에 O(1)로 문제를 해결할 수 있다.
import sys
t = int(sys.stdin.readline())
for _ in range(t):
password = list(sys.stdin.readline().rstrip()) #1
stack = [] #2
stack2 = [] #3
for pw in password:
if pw.isalpha(): #4
stack.append(pw)
elif pw.isdigit(): #5
stack.append(pw)
elif pw == '<' and len(stack) != 0: #6
stack2.append(stack.pop())
elif pw == '>' and len(stack2) != 0: #7
stack.append(stack2.pop())
elif pw == '-' and len(stack) != 0: #8
stack.pop()
print(''.join(stack) + ''.join(reversed(stack2))) #9
#1 : 비밀번호 입력값
#2, 3 : 입력값을 저장해줄 스택 2개 선언
#4 : 입력값의 요소가 알파벳인 경우 stack에 넣기
#5 : 입력값의 요소가 숫자인 경우 stack에 넣기
#6 : <인 경우 커서를 왼쪽으로 옮기는 것이기에 stack의 길이가 0이 아닐때 stack의 top을 빼서 stack2에 삽입
#7 : >인 경우 커서를 오른쪽으로 옮기는 것이기에 stack2의 길이가 0이 아닐때 stakc2의 top을 빼서 stack에 삽입
#8 : -인 경우 잘못입력해서 삭제하는 경우이기에 stack에서 top을 삭제
#9 : stack과 stack2를 묶어서 출력 (stack2는 stack의 기준에서 역순으로 정렬되어 있을테니 reversed함수 사용)
https://hgk5722.tistory.com/249
728x90
'[Coding Test] > [백준]' 카테고리의 다른 글
[백준] 2841 파이썬(python) : 외계인의 기타 연주 (0) | 2022.07.22 |
---|---|
[백준] 17608 파이썬(python) : 막대기 (0) | 2022.07.22 |
[백준] 3986 파이썬(python) : 좋은 단어 (0) | 2022.07.21 |
[백준] 1918 파이썬(python) : 후위 표기식 (0) | 2022.07.21 |
[백준] 1935 파이썬(python) : 후위 표기식2 (0) | 2022.07.21 |