[Silver II] Title: 키로거, Time: 808 ms, Memory: 42964 KB -BaekjoonHub

This commit is contained in:
SSUM
2025-09-27 23:02:40 +09:00
parent 80d03fd0fd
commit f6fc21e3e7
2 changed files with 57 additions and 0 deletions

View File

@@ -0,0 +1,32 @@
# [Silver II] 키로거 - 5397
[문제 링크](https://www.acmicpc.net/problem/5397)
### 성능 요약
메모리: 42964 KB, 시간: 808 ms
### 분류
자료 구조, 스택, 연결 리스트
### 제출 일자
2025년 9월 27일 23:02:32
### 문제 설명
<p>창영이는 강산이의 비밀번호를 훔치기 위해서 강산이가 사용하는 컴퓨터에 키로거를 설치했다. 며칠을 기다린 끝에 창영이는 강산이가 비밀번호 창에 입력하는 글자를 얻어냈다.</p>
<p>키로거는 사용자가 키보드를 누른 명령을 모두 기록한다. 따라서, 강산이가 비밀번호를 입력할 때, 화살표나 백스페이스를 입력해도 정확한 비밀번호를 알아낼 수 있다. </p>
<p>강산이가 비밀번호 창에서 입력한 키가 주어졌을 때, 강산이의 비밀번호를 알아내는 프로그램을 작성하시오. 강산이는 키보드로 입력한 키는 알파벳 대문자, 소문자, 숫자, 백스페이스, 화살표이다.</p>
### 입력
<p>첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한줄로 이루어져 있고, 강산이가 입력한 순서대로 길이가 L인 문자열이 주어진다. (1 ≤ L ≤ 1,000,000) 강산이가 백스페이스를 입력했다면, '-'가 주어진다. 이때 커서의 바로 앞에 글자가 존재한다면, 그 글자를 지운다. 화살표의 입력은 '<'와 '>'로 주어진다. 이때는 커서의 위치를 움직일 수 있다면, 왼쪽 또는 오른쪽으로 1만큼 움직인다. 나머지 문자는 비밀번호의 일부이다. 물론, 나중에 백스페이스를 통해서 지울 수는 있다. 만약 커서의 위치가 줄의 마지막이 아니라면, 커서 및 커서 오른쪽에 있는 모든 문자는 오른쪽으로 한 칸 이동한다.</p>
### 출력
<p>각 테스트 케이스에 대해서, 강산이의 비밀번호를 출력한다. 비밀번호의 길이는 항상 0보다 크다.</p>

View File

@@ -0,0 +1,25 @@
import sys
test_case = int(sys.stdin.readline())
for _ in range(test_case):
left_stack = []
right_stack = []
input_str = sys.stdin.readline().strip()
for char in input_str:
if char == '<':
if left_stack:
right_stack.append(left_stack.pop())
elif char == '>':
if right_stack:
left_stack.append(right_stack.pop())
elif char == '-':
if left_stack:
left_stack.pop()
else:
left_stack.append(char)
left_stack.extend(reversed(right_stack))
print(''.join(left_stack))