From f6fc21e3e7ddcd6cc0d87574d8e00d9db930097f Mon Sep 17 00:00:00 2001 From: SSUM <116950962+ssum21@users.noreply.github.com> Date: Sat, 27 Sep 2025 23:02:40 +0900 Subject: [PATCH] =?UTF-8?q?[Silver=20II]=20Title:=20=ED=82=A4=EB=A1=9C?= =?UTF-8?q?=EA=B1=B0,=20Time:=20808=20ms,=20Memory:=2042964=20KB=20-Baekjo?= =?UTF-8?q?onHub?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 백준/Silver/5397. 키로거/README.md | 32 ++++++++++++++++++++++++++++++ 백준/Silver/5397. 키로거/키로거.py | 25 +++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 백준/Silver/5397. 키로거/README.md create mode 100644 백준/Silver/5397. 키로거/키로거.py diff --git a/백준/Silver/5397. 키로거/README.md b/백준/Silver/5397. 키로거/README.md new file mode 100644 index 0000000..b0752e7 --- /dev/null +++ b/백준/Silver/5397. 키로거/README.md @@ -0,0 +1,32 @@ +# [Silver II] 키로거 - 5397 + +[문제 링크](https://www.acmicpc.net/problem/5397) + +### 성능 요약 + +메모리: 42964 KB, 시간: 808 ms + +### 분류 + +자료 구조, 스택, 연결 리스트 + +### 제출 일자 + +2025년 9월 27일 23:02:32 + +### 문제 설명 + +
창영이는 강산이의 비밀번호를 훔치기 위해서 강산이가 사용하는 컴퓨터에 키로거를 설치했다. 며칠을 기다린 끝에 창영이는 강산이가 비밀번호 창에 입력하는 글자를 얻어냈다.
+ +키로거는 사용자가 키보드를 누른 명령을 모두 기록한다. 따라서, 강산이가 비밀번호를 입력할 때, 화살표나 백스페이스를 입력해도 정확한 비밀번호를 알아낼 수 있다.
+ +강산이가 비밀번호 창에서 입력한 키가 주어졌을 때, 강산이의 비밀번호를 알아내는 프로그램을 작성하시오. 강산이는 키보드로 입력한 키는 알파벳 대문자, 소문자, 숫자, 백스페이스, 화살표이다.
+ +### 입력 + +첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한줄로 이루어져 있고, 강산이가 입력한 순서대로 길이가 L인 문자열이 주어진다. (1 ≤ L ≤ 1,000,000) 강산이가 백스페이스를 입력했다면, '-'가 주어진다. 이때 커서의 바로 앞에 글자가 존재한다면, 그 글자를 지운다. 화살표의 입력은 '<'와 '>'로 주어진다. 이때는 커서의 위치를 움직일 수 있다면, 왼쪽 또는 오른쪽으로 1만큼 움직인다. 나머지 문자는 비밀번호의 일부이다. 물론, 나중에 백스페이스를 통해서 지울 수는 있다. 만약 커서의 위치가 줄의 마지막이 아니라면, 커서 및 커서 오른쪽에 있는 모든 문자는 오른쪽으로 한 칸 이동한다.
+ +### 출력 + +각 테스트 케이스에 대해서, 강산이의 비밀번호를 출력한다. 비밀번호의 길이는 항상 0보다 크다.
+ diff --git a/백준/Silver/5397. 키로거/키로거.py b/백준/Silver/5397. 키로거/키로거.py new file mode 100644 index 0000000..48b038c --- /dev/null +++ b/백준/Silver/5397. 키로거/키로거.py @@ -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)) \ No newline at end of file