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 sc = new Scanner(System.in);
        String str = sc.next();
        System.out.println(T.solution(str));
    }
}
여는 괄호일 때 스택에 푸시하고, 닫는 괄호일 때 스택에서 팝한다.
닫는 괄호를 넣을 때 스택이 비어있다면 닫는 괄호가 더 많은 상황이므로 NO를 리턴하고,
문자열을 다 돌고 난 후에 스택이 비어있지 않다면 여는 괄호가 더 많은 상황이므로 NO를 리턴한다.
반응형
    
    
    
  'ALGORITHM' 카테고리의 다른 글
| [JAVA] 알고리즘 : Stack- 크레인 인형뽑기(카카오) (0) | 2022.07.12 | 
|---|---|
| [JAVA] 알고리즘 : Stack- 괄호문자제거 (0) | 2022.07.11 | 
| [JAVA] 백준 13414번- 수강신청 (0) | 2022.07.07 | 
| [JAVA] 백준 16499번- 동일한 단어 그룹화하기 (0) | 2022.07.06 | 
| [JAVA] 백준 10546번- 배부른 마라토너 (0) | 2022.07.06 |