[백준] 5397번 키로거 - Java

yseo14·2024년 9월 23일

코딩테스트 대비

목록 보기
21/88


5397번 키로거

풀이

1406번 에디터 문제와 굉장히 유사해서 빠르게 풀 수 있었다.
입력되는 문자열을 char타입 배열에 문자를 하나씩 저장하고, 차례대로 확인하며 문제에서 요구하는 동작을 하도록 구현하였다. stack을 두 개 사용해서 왼쪽의 스택과 오른쪽의 스택 사이에 커서가 존재하는 것처럼 구현을 하니 쉽게 풀 수 있었다.

package BOJ;

import java.io.*;
import java.util.Stack;

public class sol5397 {

    static int T;
    static Stack<Character> left;
    static Stack<Character> right;
    static String init;
    static char[] log;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        T = Integer.parseInt(br.readLine());
        for (int i = 0; i < T; i++) {
            init = br.readLine();
            log = init.toCharArray();
            left = new Stack<>();
            right = new Stack<>();

            for (char c : log) {
                switch (c) {
                    case '<':
                        if (!left.isEmpty()) {
                            right.push(left.pop());
                        }
                        break;
                    case '>':
                        if (!right.isEmpty()) {
                            left.push(right.pop());
                        }
                        break;

                    case '-':
                        if (!left.isEmpty()) {
                            left.pop();
                        }
                        break;
                    default:
                        left.push(c);
                        break;
                }
            }

            while (!left.isEmpty()) {
                right.push(left.pop());
            }
            while (!right.isEmpty()) {
                bw.write(right.pop());
            }
            if (i != T - 1) {
                bw.write("\n");
            }
        }
        bw.flush();
        bw.close();
    }
}
profile
like the water flowing

0개의 댓글