ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 1406 - 에디터
    자료구조와 알고리즘/문제풀기 2023. 4. 5. 11:29

     

    해결방법 

    - 첫 줄을 입력받아 데이터를 저장한다.

    - 각 상황에 맞게 명령을 구현한다.

                -스택을 사용하면, 스택 두개를 두고 

                - L  - 왼쪽 스택에서 글자하나 pop()해서 오른쪽 스택에 넣기 

                - D - 오른쪽 스택에서 글자하나 pop()해서 왼쪽 스택에 넣기 

                - B - 왼쪽스택에 글자하나 pop()하기

                - P - 왼쪽 스택에 글자하나 push()하기

    - 왼쪽스택에 있는 문자 전부 pop해서 오른쪽에 넣고 오른쪽 스택 문자 하나씩 pop출력

     -> abcy (왼) x(오) -->왼에서 오로 pop xycba ->이거 다시 pop하면 abcdyx (뒤집은걸 다시 뒤집은 것 뿐)

    -> 왼쪽에 몰아넣고  배열을 만들어서 배열 마지막 인덱스부터 pop()으로 넣어 만들어도 됨

     

     

    public static void main(String[] args) throws Exception {
    
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        //왼쪽 스택
        Stack Sstack = new Stack<>();
        //오른쪽 스택 
        Stack s2 = new Stack();
        //초기 스택에 저장할 문자
        String input = br.readLine();
        for(char a: input.toCharArray()) Sstack.push(a);
        int t = Integer.valueOf(br.readLine());
    
        //테스트 케이스 만큼 등록된 명령어 실행
        while(t-- > 0 ){
            input = br.readLine();
    
            if(input.contains("P")){
                Sstack.push(input.charAt(input.indexOf(' ')+1));
            }
            if(input.equals("L")){
                if(Sstack.empty())continue;
                s2.push(Sstack.pop());
            }
            if(input.equals("D")){
                if(s2.empty())continue;
                Sstack.push(s2.pop());
            }
            if(input.equals("B")){
                if(Sstack.empty())continue;
                Sstack.pop();
            }
    
        }
        //하나로 합치기
        while(!Sstack.empty())
            s2.push(Sstack.pop());
    
        //출력을 위함
        while(!s2.empty())
            bw.write((char)s2.pop());
    
        bw.flush();
        bw.close();
    }

     

    출력부분 배열처리

     //하나로 합치기
                while(!s2.empty())
                    Sstack.push(s2.pop());
    
                //출력을 위함
                int size = Sstack.size();
                result = new char[size];
                while(!Sstack.empty()){
                    result[--size] = (char)Sstack.pop();
                }

     

     

    배운점 - 

    스택다루기 

    P $같은 인풋 처리할때, split() 자주썼는데, indexof랑 substring도 괜춘할듯하다! 

    두번 뒤집에서 원상복구하기 1 pop- 2push - 2pop

    '자료구조와 알고리즘 > 문제풀기' 카테고리의 다른 글

    백준 1158 - 요세푸스 문제  (0) 2023.04.05
    백준 10845 - 큐 구현  (0) 2023.04.05
    백준 1874 - 스택수열  (0) 2023.04.04
    백준 9012 - 괄호  (0) 2023.04.04
    백준 9093 - 단어뒤집기  (0) 2023.04.04
Designed by Tistory.