[java] 프로그래머스 (올바른 괄호) Level 2
Algorithm/Programmers

[java] 프로그래머스 (올바른 괄호) Level 2

Problem : https://programmers.co.kr/learn/courses/30/lessons/12909

 

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

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

programmers.co.kr

Approach

괄호체크는 간단하게 Stack을 사용하여 확인할 수 있다.

'('을 만나면 stack에 push를 하고, ')'를 만났을 땐 stack이 비어있거나 stack의 top이 '('이 아니면 false를 반환한다.
맞다면 stack에서 pop을 한다.

또, 문자열의 끝까지 위 과정을 반복해서 끝낸 후, stack이 차있다면 false를 반환한다.

위의 두 경우는 올바르지 않은 괄호이고, 위의 두 경우가 아닌경우 올바른 괄호이므로 true를 반환한다.

Code

import java.util.Stack;

public class CorrectBracket {
    public static void main(String[] args) {
        String s = "(()(";
        CorrectBracket cb = new CorrectBracket();
        System.out.println(cb.solution(s));
    }

    public boolean solution(String s) {
        var stack = new Stack<Character>();

        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '(') {
                stack.push('(');
            } else {
                if (stack.isEmpty()) {
                    return false;
                } else {
                    stack.pop();
                }
            }
        }

        if (stack.isEmpty()) {
            return true;
        } else {
            return false;
        }
    }
}