-
[Baekjoon Online Judge] 5397번: 키로거문제 풀이/Baekjoon Online Judge 2021. 4. 4. 14:02
요구사항
- 창영이는 강산이의 비밀번호를 훔치기 위해서 강산이가 사용하는 컴퓨터에 키로거를 설치했다. 며칠을 기다린 끝에 창영이는 강산이가 비밀번호 창에 입력하는 글자를 얻어냈다.
- 키로거는 사용자가 키보드를 누른 명령을 모두 기록한다. 따라서, 강산이가 비밀번호를 입력할 때, 화살표나 백스페이스를 입력해도 정확한 비밀번호를 알아낼 수 있다.
- 강산이가 비밀번호 창에서 입력한 키가 주어졌을 때, 강산이의 비밀번호를 알아내는 프로그램을 작성하시오.
입력
- 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한줄로 이루어져 있고, 강산이가 입력한 순서대로 길이가 L인 문자열이 주어진다. (1 ≤ L의 길이 ≤ 1,000,000) 강산이가 백스페이스를 입력했다면, '-'가 주어진다. 이때 커서의 바로 앞에 글자가 존재한다면, 그 글자를 지운다. 화살표의 입력은 '<'와 '>'로 주어진다. 이때는 커서의 위치를 움직일 수 있다면, 왼쪽 또는 오른쪽으로 1만큼 움직인다. 나머지 문자는 비밀번호의 일부이다. 물론, 나중에 백스페이스를 통해서 지울 수는 있다. 만약 커서의 위치가 줄의 마지막이 아니라면, 커서 및 커서 오른쪽에 있는 모든 문자는 오른쪽으로 한 칸 이동한다.
출력
- 각 테스트 케이스에 대해서, 강산이의 비밀번호를 출력한다. 비밀번호의 길이는 항상 0보다 크다.
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.Deque; import java.util.LinkedList; public class Baekjoon5397 { public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out)); int n = Integer.parseInt(bufferedReader.readLine()); for (int i = 0; i < n; i++) { String password = bufferedReader.readLine(); Deque<Character> pre = new LinkedList<>(); Deque<Character> post = new LinkedList<>(); for (int j = 0; j < password.length(); j++) { char c = password.charAt(j); if (c == '<') { if (!pre.isEmpty()) post.push(pre.pop()); } else if (c == '>') { if (!post.isEmpty()) pre.push(post.pop()); } else if (c == '-') { if (!pre.isEmpty()) pre.pop(); } else { pre.push(c); } } while (!post.isEmpty()) { pre.push(post.pop()); } while (!pre.isEmpty()) { bufferedWriter.write(pre.pollLast()); } bufferedWriter.write("\n"); } bufferedWriter.flush(); bufferedReader.close(); bufferedWriter.close(); } }
'문제 풀이 > Baekjoon Online Judge' 카테고리의 다른 글
[Baekjoon Online Judge] 10974번: 모든 순열 (0) 2021.04.21 [Baekjoon Online Judge] 10546번: 배부른 마라토너 (0) 2021.04.04 [Baekjoon Online Judge] 10845번: 큐 (0) 2021.04.04 [Baekjoon Online Judge] 10828번: 스택 (0) 2021.03.29 [Baekjoon Online Judge] 19947번: 투자의 귀재 배주형 (0) 2021.03.29