[백준] 5397. 키로거

최대 1 분 소요

문제 링크

[백준] 5397. 키로거


풀이 과정

커서를 기준으로 삽입삭제가 발생해야 하므로, 스택을 두 개 사용해 문제를 풀었습니다. 스택과 스택 사이에는 커서가 위치한다고 생각하면 됩니다. 따라서, 커서의 위치를 이동시키는 < 또는 > 가 입력되면, 스택의 맨 위의 문자를 반대 방향의 스택으로 옮겨주어 처리할 수 있습니다.


예를 들어, _ 를 커서 위치라고 했을 때 AB_CDE 는, 다음과 같이 구성됩니다.

그리고, right 스택의 top 을 모두 left 스택으로 옮기면, 아래와 같이 뒤집어 left 에 붙게 됩니다.


코드

import java.util.Scanner;
import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int TC = sc.nextInt();

        for (int tc = 1; tc <= TC; tc++) {
            String str = sc.next();
            Stack<Character> left = new Stack<>();
            Stack<Character> right = new Stack<>();

            for (int i = 0; i < str.length(); i++) {
                char ch = str.charAt(i);

                if (ch == '<') {
                    if (!left.isEmpty()) right.push(left.pop());
                } else if (ch == '>') {
                    if (!right.isEmpty()) left.push(right.pop());
                } else if (ch == '-') {
                    if (!left.isEmpty()) left.pop();
                } else left.push(ch);
            }

            StringBuilder sb = new StringBuilder();
            while (!right.isEmpty()) left.push(right.pop());
            while (!left.isEmpty()) sb.append(left.pop());

            System.out.println(sb.reverse());
        }
    }
}

카테고리:

업데이트:

댓글남기기