Programming/JAVA
[백준] 5397: 키로거
gayeon_
2024. 1. 24. 00:40
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.ListIterator;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int t = 0; t < T; t++) {
String input = br.readLine();
String result = getPassword(input);
System.out.println(result);
}
}
private static String getPassword(String input) {
LinkedList<Character> password = new LinkedList<>();
ListIterator<Character> iterator = password.listIterator();
for (char c : input.toCharArray()) {
switch (c) {
case '<':
if (iterator.hasPrevious()) {
iterator.previous();
}
break;
case '>':
if (iterator.hasNext()) {
iterator.next();
}
break;
case '-':
if (iterator.hasPrevious()) {
iterator.previous();
iterator.remove();
}
break;
default:
iterator.add(c);
break;
}
}
StringBuilder sb = new StringBuilder();
for (char c : password) {
sb.append(c);
}
return sb.toString();
}
}
키로거가 기록한 입력을 통해 강산이의 비밀번호를 복원하는 프로그램이다.
getPassword메서드는 주어진 문자열을 순회하면서 키로거의 동작에 따라 비밀번호를 조작한다.
LinkedList를 사용하여 비밀번호를 저장하고
ListIterator를 이용하여 현재 커서 위치를 관리한다.
'<'가 나오면 이전 위치로 커서를 이동하고, '>'가 나오면 다음 위치로 커서를 이동한다.
'-'가 나오면 현재 커서 위치의 이전 문자를 삭제한다. 이때 커서를 이동한 후에 삭제를 해야 하므로 iterator.previous()를 사용했다.
그 외의 문자는 현재 커서 위치에 추가한다.
마지막으로 StringBuilder를 사용하여 비밀번호를 구성하고 반환한다.