Skip to content

Commit b8cb7fe

Browse files
committed
[Silver II] Title: 키로거, Time: 712 ms, Memory: 234040 KB -BaekjoonHub
1 parent e07a894 commit b8cb7fe

2 files changed

Lines changed: 62 additions & 0 deletions

File tree

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# [Silver II] 키로거 - 5397
2+
3+
[문제 링크](https://www.acmicpc.net/problem/5397)
4+
5+
### 성능 요약
6+
7+
메모리: 234040 KB, 시간: 712 ms
8+
9+
### 분류
10+
11+
자료 구조, 스택, 연결 리스트
12+
13+
### 제출 일자
14+
15+
2026년 1월 6일 09:41:35
16+
17+
### 문제 설명
18+
19+
<p>창영이는 강산이의 비밀번호를 훔치기 위해서 강산이가 사용하는 컴퓨터에 키로거를 설치했다. 며칠을 기다린 끝에 창영이는 강산이가 비밀번호 창에 입력하는 글자를 얻어냈다.</p>
20+
21+
<p>키로거는 사용자가 키보드를 누른 명령을 모두 기록한다. 따라서, 강산이가 비밀번호를 입력할 때, 화살표나 백스페이스를 입력해도 정확한 비밀번호를 알아낼 수 있다. </p>
22+
23+
<p>강산이가 비밀번호 창에서 입력한 키가 주어졌을 때, 강산이의 비밀번호를 알아내는 프로그램을 작성하시오. 강산이는 키보드로 입력한 키는 알파벳 대문자, 소문자, 숫자, 백스페이스, 화살표이다.</p>
24+
25+
### 입력
26+
27+
<p>첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한줄로 이루어져 있고, 강산이가 입력한 순서대로 길이가 L인 문자열이 주어진다. (1 ≤ L ≤ 1,000,000) 강산이가 백스페이스를 입력했다면, '-'가 주어진다. 이때 커서의 바로 앞에 글자가 존재한다면, 그 글자를 지운다. 화살표의 입력은 '<'와 '>'로 주어진다. 이때는 커서의 위치를 움직일 수 있다면, 왼쪽 또는 오른쪽으로 1만큼 움직인다. 나머지 문자는 비밀번호의 일부이다. 물론, 나중에 백스페이스를 통해서 지울 수는 있다. 만약 커서의 위치가 줄의 마지막이 아니라면, 커서 및 커서 오른쪽에 있는 모든 문자는 오른쪽으로 한 칸 이동한다.</p>
28+
29+
### 출력
30+
31+
<p>각 테스트 케이스에 대해서, 강산이의 비밀번호를 출력한다. 비밀번호의 길이는 항상 0보다 크다.</p>
32+
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
let input = require('fs').readFileSync('./dev/stdin').toString().trim().split('\n');
2+
let N = Number(input[0]);
3+
4+
for (let i = 1; i <= N; i++) {
5+
let arr = input[i].split('');
6+
let leftArr = [];
7+
let rightArr = [];
8+
let answer = '';
9+
let string = '';
10+
11+
arr.map((a) => {
12+
if (a === '<') {
13+
if (leftArr.length) {
14+
string = leftArr.pop();
15+
rightArr.push(string);
16+
}
17+
} else if (a === '>') {
18+
if (rightArr.length) {
19+
string = rightArr.pop();
20+
leftArr.push(string);
21+
}
22+
} else if (a === '-') {
23+
leftArr.pop();
24+
} else {
25+
leftArr.push(a);
26+
}
27+
});
28+
answer = leftArr.join('') + rightArr.reverse().join('');
29+
console.log(answer);
30+
}

0 commit comments

Comments
 (0)