mondegreen

[240410] 알고리즘 리부트 47일차 - 백준 5397 자바 본문

알고리즘 풀이 및 리뷰/[패캠] 핵심유형 20개로 한 번에 끝내는 알고리즘 코딩테스트 리뷰

[240410] 알고리즘 리부트 47일차 - 백준 5397 자바

앙갱 2024. 4. 10. 21:57
반응형

커서가 이동하기 위해서는 스택을 두개 사용하는 것이 필요할 것 같았다. 커서를 기준으로 왼쪽과 오른쪽 스택을 별도로 구현하고 커서를 기준으로 양쪽으로 이동시켜주면 된다. 커서 이동과 삭제 시마다 스택이 비어있는지 확인하는 것은 필수이고 커서가 중간에 위치한채로 입력이 끝날 수 있기 때문에 오른쪽 스택에 존재하는 값을 왼쪽으로 모두 옮겨준 후에 stringbuilder로 문자열화해주고 역순으로 처리해주면 된다.

package BaekJoon.stack;

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;

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

        int tc = sc.nextInt();

        while (tc-- > 0) {

            String str = sc.next();

            Deque<Character> left = new ArrayDeque<>();
            Deque<Character> right = new ArrayDeque<>();


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

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

            }
            // 커서 오른쪽에 있는 값 다시 왼쪽으로 넣어주기
            while (!right.isEmpty()) left.push(right.pop());

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


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

        }

    }
}

 

반응형