본문 바로가기
codingTest/백준

[codingTest][백준] 키로거📌

by 세류오 2026. 1. 16.

[문제링크]

https://www.acmicpc.net/problem/5397

 

[문제를 어떻게 이해했는가?]

1. 테스트 케이스의 개수 num을 입력받는다.

2. 각 테슽  케이스마다 문자열 하나를 처리

3. 두 개의 스택(Deque)를 준비한다

- left: 커서 왼쪽의 문자

- right: 커서 오른쪽의 문자

4. 문자열을 왼쪽부터 하나씩 확인

- 일반 문자

  - left에 push한다

- <(왼쪽 화살표)

  - left가 비어있지 않다면

  - left.pop() 이후 right(push)

- >(오른쪽 화살표)

  - right가 비어있지 않다면

  - right.pop() 이후 left.push()

- - (백스페이스)

  - left가 비어있지 않다면 pop을 진행

5. 모든 입력을 처리 후

- right를 역순으로 left뒤에 붙여서 출력

 

[코드]

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

public class Main {
    /**
     * 스택: 키로거(5397)
     * 문자열이 10^6이니까 O(n)으로 풀어야 한다
     */
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int num = Integer.parseInt(br.readLine()); // 입력받을 횟수

        while(num-- > 0){
            String str = br.readLine();
            Deque<Character> left = new ArrayDeque<>();
            Deque<Character> right = new ArrayDeque<>();
            for(char c : str.toCharArray()){
                if(c == '<') {// 왼쪽이동일 경우
                    if(!left.isEmpty()){ // 왼쪽이 비어있지 않다면
                        right.push(left.pop());
                    }
                } else if (c == '>') { // 오른쪽이동일 경우
                    if(!right.isEmpty()) { // 오른쪽이 비어있지 않다면
                        left.push(right.pop());
                    }
                } else if (c == '-') { // 백스페이스
                    if(!left.isEmpty()) {
                        left.pop();
                    }
                } else {
                    left.push(c);
                }

            }

            while(!left.isEmpty()) {
                right.push(left.pop());
            }
            while(!right.isEmpty()) {
                sb.append(right.pop());
            }

            sb.append('\n');
        }
        System.out.println(sb.toString());
    }
}

'codingTest > 백준' 카테고리의 다른 글

[codingTest][백준] 큐2  (0) 2026.01.25
[codingTest][백준] 균형잡힌 세상  (0) 2026.01.12
[백준][DFS] 바이러스  (0) 2025.10.08
[백준] 스택(10828)  (0) 2023.03.08
[백준] 11654번 아스키 코드  (0) 2022.07.22