PROGRAMMERS/스택&큐

[프로그래머스] [JAVA] [Level 2] [스택/큐] 올바른 괄호

c0mmedes 2022. 9. 14. 03:13



import java.util.*;

class Solution {
    boolean solution(String s) { 
        
        boolean answer = false;

        // s가 홀수이거나 첫문자가 ')' 이거나 마지막 문자가 '(' 일 때 그대로 return
        // 이 코드는 없어도 무관
        if(s.length()%2!=0 || s.charAt(0)==')' || s.charAt(s.length()-1)=='('){
            return answer;
        }
    
        Stack<Character> stk = new Stack<>();
        
        for(int i=0; i<s.length(); i++){
            // '(' 는 push
            if(s.charAt(i)=='('){
                stk.push('(');
            // ')' 일 때는 스택이 비어있으면 false 리턴
            // 아닐 경우에는 '('가 스택에 있기 때문에 
            // 스택안의 '(' 를 없애줌
            } else {
                if (stk.isEmpty()){
                    return answer;
                } else {
                    stk.pop();
                }
            }
        }

        // 비어있으면(짝지어서 사라졌기 때문에) true, 남아있을 경우 false
        answer = stk.isEmpty() ? true : false;

        return answer;
    }
}

Stack 자료 구조

  • LFIO 구조 - > LAST IN FIRST OUT , 나중에 들어간 것이 먼저 나옴
  • import java.util.Stack -> import
  • Stack<Integer> stack = new Stack<>() -> int형 스택 선언
  • stack.isEmpty() -> Stack 비어있는지 true ,false로 반환
  • stack.push() -> Stack 에 값 추가
  • stack.pop() -> Stack 맨 위의 저장된 값을 꺼냄
  • stack.clear() -> Stack 초기화