코딩테스트/프로그래머스

[코딩테스트] Java 올바른 괄호

[dev] hiro 2024. 11. 9. 03:57
제가 공부한 내용을 정리하는 블로그입니다.
아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
Programmers 알고리즘 고득점 Kit입니다.

포인트

유명한 스택 문제입니다. ')'이 있으면 '('가 스택에 존재해야합니다. 또 마지막 스택에는 아무런 원소가 없어야합니다.

소스코드

import java.util.Stack;

class Solution {
    boolean solution(String s) {
        Stack<Character> bracketValidator = new Stack<>();
        
        int len = s.length();
        for (int i = 0; i < len; i++) {
            if (s.charAt(i) == ')') {
                if (bracketValidator.isEmpty() || bracketValidator.peek() != '(') {
                    return false;
                }
                bracketValidator.pop();
            } else {
                bracketValidator.add('(');
            }
        }
        
        return bracketValidator.isEmpty() ? true : false;
    }
}

코드 설명

  • Stack<Character> bracketValidator = new Stack<>();
    Character를 원소로 갖는 Stack을 선언합니다.
  • if (s.charAt(i) == ')') { if (bracketValidator.isEmpty() || bracketValidator.peek() != '(') { return false; } }
    • ')'가 되었을 때 Stack에 (이 없거나 empty이면 false를 리턴합니다.
    • 이후 Stack의 원소를 pop해줍니다.
  • else { bracketValidator.add('('); }
    • '(' 값을 만났을 때에는 Stack에 add 해줍니다.
  • return bracketValidator.isEmpty() ? true : false;
    • Stack의 원소가 없으면 true를 리턴 그렇지 않으면 false를 리턴합니다.