본문 바로가기
알고리즘 이전/스택, 큐

괄호문자제거

by hoshi03 2023. 8. 8.

입력된 문자열에서 소괄호 ( ) 사이에 존재하는 모든 문자를 제거하고 남은 문자만 출력하기

 

스택 요소 접근할때는 stack.get(i); 형태로 접근

stringbuffer와 stringbuilder 다시 복습하기

 

내 풀이 '('를 만나면 스택에 넣고 ')'를 만나면 pop을 하는 구조 

문자열을 넣엇을땐 스택이 비어있지 않고  '('가 peek이면 문자열을 push

 

import java.util.*;
public class Main {
    public String Solution(String s1){
        String ans = "";
        char[] arr1 = s1.toCharArray();
        Stack<Character> st = new Stack<>();
        for(char x : arr1){
            if(x == '(') st.push(x);
            else if (x == ')') st.pop();
            else {
                if(!st.empty() && st.peek() == '(') continue;
                else st.push(x);
            }
        }
        while (!st.empty())ans += st.pop();
        StringBuffer sb = new StringBuffer(ans);
        return sb.reverse().toString();
    }

    public static void main(String[] args) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        String s1 = in.next();
        System.out.print(T.Solution(s1));
    }
}

 

 

강의 풀이 여는괄호나 알파벳을 만나면 push,

닫는 괄호를 만나면 여는 괄호까지 pop

간단하게 구현할수 있다..

 

import java.util.*;
public class Main {
    public String Solution(String s1){
        String ans = "";
        char[] arr1 = s1.toCharArray();
        Stack<Character> st = new Stack<>();
        for(char x : arr1){
            if (x==')') while (st.pop() != '(');
            else st.push(x);
        }
        for(int i =0; i < st.size(); i++) ans += st.get(i);
        return  ans;
    }

    public static void main(String[] args) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        String s1 = in.next();
        System.out.print(T.Solution(s1));
    }
}

'알고리즘 이전 > 스택, 큐' 카테고리의 다른 글

교육과정 설계  (0) 2023.08.12
공주 구하기  (0) 2023.08.11
후위식 연산  (0) 2023.08.10
크레인 인형뽑기  (0) 2023.08.10
올바른 괄호  (0) 2023.08.08