++/자료구조&알고리즘
[baekjoon] 5397. 키 로거
writtenbyrla
2024. 1. 8. 20:10
✅ 문제
✅ 풀이
이 문제는 하나의 커서로 이동하는 특징을 고려해서, 스택으로 풀 수 있다.
💡 Point
* 일반 문자, 왼쪽 커서 이동('<'), 오른쪽 커서 이동('>'), 백 스페이스('-') 네 가지 조건 나누기
1. 일반 문자: pwd 배열에 그대로 입력
2. 백 스페이스: pwd 배열에서 마지막 글자 제거 - 스택의 pop() 이용
3. 왼쪽 커서 이동 - 현재 커서가 있는 곳중간부터 입력이 들어가야 하므로 오른쪽 문자를 제거해놓아야 함
1) pwd의 마지막 글자를 제거하여 임의의 배열(cursor)에 담아 놓고,
2) 다른 연산이 끝난 후 다시 뒤에다가 붙이기(붙일 땐 거꾸로)
4. 오른쪽 커서 이동 - 임의의 배열에 담아둔 글자가 있다면 그 글자 다음에 새로운 문자를 입력받아야 함
1) cursor의 마지막 글자를 제거하여 pwd 배열 마지막 요소로 붙임
* 입력받은 문자에 대한 연산이 끝난 후 cursor 배열에 남은 요소를 pwd 배열 마지막에 역순으로 이어 붙임
T = int(input())
for _ in range(T):
pwd = []
cursor = []
word = input()
for i in word:
if i == '-':
if pwd:
pwd.pop()
elif i == '<':
if pwd:
cursor.append(pwd.pop())
elif i == '>':
if cursor:
pwd.append(cursor.pop())
else:
pwd.append(i)
pwd.extend(reversed(cursor))
print(''.join(pwd))