CS 기초/알고리즘 · 문제풀이

Stack, Queue(자료구조) - 올바른 괄호 / 괄호문자제거

sofiaaa 2022. 3. 17. 15:50

 

 올바른 괄호

 

스택

LIFO

스택의 대표적인 문제

Stack<Character> stack = new Stack<>();

import java.util.*;

public class Main {
    public String solution(String str){
        String answer = "YES";
        Stack<Character> stack = new Stack<>();
        for(char x : str.toCharArray()){
            if(x =='(') stack.push(x);
            else {
                if(stack.isEmpty()) return "NO";
                stack.pop();
            }
        }
        if(!stack.isEmpty()) return "NO";
        return answer;
    }

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

 

 괄호문자제거

 

내 코드(정답) - 하지만 스택으로 풀지 않았다..

 

import java.util.*;

public class Main {
    public String solution(String str){
        String answer = "";
        Stack<Character> stack = new Stack<>();

        int check = 0;

        for(char i : str.toCharArray()){
            if(i == '(') check = check + 1;
            else if(i == ')') check = check -1;

            if(check == 0){
                if(i != ')'){
                    answer += i;
                }
            }
        }

        return answer;
    }

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

 

정답 코드

 

import java.util.*;

public class Main {
    public String solution(String str){
        String answer = "";
        Stack<Character> stack = new Stack<>();

        for(char x : str.toCharArray()){
            if(x == ')') {
                while(stack.pop() != '(');
            }
            else stack.push(x);
        }

        for(int i = 0; i < stack.size(); i++) answer += stack.get(i);

        return answer;
    }

    public static void main(String[] args){
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        String str = kb.next();
        System.out.print(T.solution(str));
    }
}
반응형