[백준/5397] 키로거

1. 문제설명

  1. 커서를 구현하기 위해 두개의 스택을 생성한다.
Stack<Character> frontStack = new Stack<>();
Stack<Character> backStack = new Stack<>();

  1. 입력한 문자가 알파벳, 숫자일경우, frontStack에 문자를 추가한다.
  • Character.isAlphabetic(char c) : 해당 문자가 알파벳인지 확인하는 함수

  • Character.isDigit(char c) : 해당 문자가 숫자인지를 확인하는 함수

	if ((Character.isAlphabetic(c) || Character.isDigit(c))) {
		frontStack.push(c);
		continue;
	}

  1. 커서를 발견할 경우, 커서 기준 문자의 위치를 변경한다.
	if (c == '<') {
		if (!frontStack.isEmpty()) {
        	backStack.push(frontStack.pop());
			continue;
		}
	}

	if (c == '>') {
		if (!backStack.isEmpty()) {
			frontStack.push(backStack.pop());
			continue;
		}
	}

  1. 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();
    }
}

좋은 웹페이지 즐겨찾기