BAEKJOON - 1406번 : 에디터

Kim Hyen Su·2023년 10월 5일
0

⏲️ 알고리즘

목록 보기
39/95

문제 링크

백준 - 1406번 : 에디터

🎇 문제 보기

커서라는 단어가 나오는데 커서는 위에 문제에서 설명하듯 글 작성 시, 현재 입력값이 들어갈 위치에 깜빡이는 곳을 말한다.

이 문제에서는 커서 기준으로 왼쪽에 있는 값을 stack-L에 담고
커서 기준 오른쪽에 있는 값을 stack-R에 담아준다.

즉, 2개의 stack을 사용하여 문제를 해결하였다.

처음 커서는 입력 문자열의 맨 뒤에 위치하기 때문에 문자들을 모두 왼쪽 스택에 넣어준다.

이후 차례로 명령어를 처리하면서 커서가 왼쪽으로 이동 시 왼쪽 스택의 가장 상단 요소를 오른쪽 스택에 pop() 시켜 이동해준다.
그리고 커서가 오른쪽으로 이동하면 위 로직을 반대로 해주면 된다.

마지막으로 모든 명령어를 처리한 후에는 스택이 LIFO 구조이기 때문에 왼쪽의 모든 요소들을 pop() 및 reverse() 해준 뒤 오른쪽 스택의 모든 요소와 합쳐주면 된다.

🎇 제출 답안

import java.io.*;
import java.util.*;
public class Main{
    public static void main(String[] args)throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        // 커서 기준 L,R
        Stack<Character> stackL = new Stack<>();
        Stack<Character> stackR = new Stack<>();
        String str = br.readLine();
        
        /* 처음 입력값 stack-L에 담기 */
        for(char ch : str.toCharArray()){
            stackL.push(ch);
        }
        
        int N = Integer.parseInt(br.readLine());
        while(N-- > 0){
            StringTokenizer st = new StringTokenizer(br.readLine()," ");
            String command = st.nextToken();
            if(command.equals("L")){
                if(stackL.empty()) continue;
                char ch = stackL.pop();
                stackR.push(ch);
            }
            else if(command.equals("D")){
                if(stackR.empty()) continue;
                char ch = stackR.pop();
                stackL.push(ch);
            }
            else if(!stackL.empty() && command.equals("B")){
                stackL.pop();
            }
            else if(command.equals("P")){
                char ch = st.nextToken().charAt(0);
                stackL.push(ch);
            }
        }

        StringBuilder sb = new StringBuilder();

        while(!stackL.empty()){
            char ch = stackL.pop();
            sb.append(ch);
        }

        sb.reverse();

        while(!stackR.empty()){
            char ch = stackR.pop();
            sb.append(ch);
        } 

        System.out.println(sb);
        br.close();
    }
}
profile
백엔드 서버 엔지니어

0개의 댓글