Algorithm/inflearn

#올바른 괄호

마닐라 2021. 9. 17. 23:00

 

 

import java.util.Scanner;
import java.util.Stack;


public class Main {
    public String solution(String str) {
        String answer = "YES";
        //(()(()))(()
        //괄호 문제는 대부분 stack
        //stack에서 여는 괄호는 push 닫는 괄호는 pop
        //끝났는데 남아있거나 닫아야하는데 비어있으면 NO
        //끝났는데 비어있으면 YES
        Stack<Character> stack = new Stack<>();
        for(char x : str.toCharArray()){
            if(x == '(') stack.push(x);
            else {
                //닫는 괄호가 많은 상황
                //여는 괄호를 pop 시켜줘야 짝이 맞음!
                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 s = kb.next();

        System.out.print(T.solution(s));



    }
}