[백준/5397] 키로거
1. 문제설명
- 커서를 구현하기 위해 두개의 스택을 생성한다.
Stack<Character> frontStack = new Stack<>();
Stack<Character> backStack = new Stack<>();
- 입력한 문자가 알파벳, 숫자일경우, frontStack에 문자를 추가한다.
-
Character.isAlphabetic(char c) : 해당 문자가 알파벳인지 확인하는 함수
-
Character.isDigit(char c) : 해당 문자가 숫자인지를 확인하는 함수
if ((Character.isAlphabetic(c) || Character.isDigit(c))) {
frontStack.push(c);
continue;
}
- 커서를 발견할 경우, 커서 기준 문자의 위치를 변경한다.
if (c == '<') {
if (!frontStack.isEmpty()) {
backStack.push(frontStack.pop());
continue;
}
}
if (c == '>') {
if (!backStack.isEmpty()) {
frontStack.push(backStack.pop());
continue;
}
}
- backspace를 만날 경우, 앞의 문자를 제거한다.
if (c == '-') {
if (!frontStack.isEmpty()) {
frontStack.pop();
}
}
2. 문제 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Stack<Character> frontStack = new Stack<>();
Stack<Character> backStack = new Stack<>();
int tc = Integer.parseInt(br.readLine());
for (int i = 0; i < tc; i++) {
char[] charArr = br.readLine().toCharArray();
for (char c : charArr) {
if ((Character.isAlphabetic(c) || Character.isDigit(c))) {
frontStack.push(c);
continue;
}
if (c == '<') {
if (!frontStack.isEmpty()) {
backStack.push(frontStack.pop());
continue;
}
}
if (c == '>') {
if (!backStack.isEmpty()) {
frontStack.push(backStack.pop());
continue;
}
}
if (c == '-') {
if (!frontStack.isEmpty()) {
frontStack.pop();
}
}
}
while (!frontStack.isEmpty()) {
backStack.push(frontStack.pop());
}
StringBuilder sb = new StringBuilder();
while (!backStack.isEmpty()) {
sb.append(backStack.pop());
}
System.out.println(sb.toString());
}
br.close();
}
}
Author And Source
이 문제에 관하여([백준/5397] 키로거), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@pbg0205/백준5397-키로거저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)