본문 바로가기

문제 풀이/Programmers

[프로그래머스] 올바른 괄호 (JAVA)

문제 출처 - Programmers

문제는 여기

 

코딩테스트 연습 - 올바른 괄호

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은

programmers.co.kr


[풀이]

1. 여는 괄호의 경우는 무조건 스택에 넣어준다.

2. 닫는 괄호의 경우는 2가지 경우가 발생한다.

2-1. 스택이 비어있는 경우는 매칭이 되지 않기 때문에 바로 false를 리턴한다.

2-2. 여는 괄호가 스택에 있는 경우는 매칭이 되기 때문에 다음 체크를 한다.

3. 1. ~ 2. 를 입력받은 s의 길이만큼 반복한다.

4. 결과를 출력한다.

[접근]

1. 여는 괄호일 때는 스택에 넣고 닫는 괄호와 매칭 시켜서 스택에 있는 괄호를 하나씩 제거하면 되겠다고 생각하였다.

[코드]

import java.util.*;

class Solution {
    boolean solution(String s) {
        Stack<Character> st = new Stack<>();
        boolean answer = true;
        
        for (int i = 0; i < s.length(); i++) {
            // '('면 넣기
            if (s.charAt(i) == '(')  
                st.push('(');
            // ')'라면
            else {
                // 스택이 비어있으면 들어오면 안됨
                if (st.isEmpty()) 
                    return false;
                // 비어있지 않으면 '(' 가 있는 상태니까 스택에서 꺼내기
                else
                    st.pop();    
            }
        }
        
        // 스택이 비어있으면 true 아니라면 false
        if (st.isEmpty())
            answer = true;
        else
            answer = false;

        return answer;
    }
}