will come true

[프로그래머스/Level2] 올바른 괄호 (Java) 본문

Algorithm

[프로그래머스/Level2] 올바른 괄호 (Java)

haehyun 2022. 1. 19. 17:17

문제

https://programmers.co.kr/learn/courses/30/lessons/12909?language=java 

 

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

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

programmers.co.kr


풀이

제한사항

  • 괄호는 반드시 여는괄호'(', 닫는 괄호')' 순으로 나와야 하며, 문자열에서 여는괄호-닫는괄호 개수 쌍이 맞아야 한다.
  • 주어진 문자열이 올바른 괄호 체계인지 체크하라. => true / false

접근방식

  • 문자열에서 문자를 하나씩 체크한다.
  • 체크 과정 중에 올바르지 못한 괄호의 경우에 해당하는 상황이 오면 바로 false를 반환한다.
    • '(' 보다 ')' 이 먼저 나온 경우
  • 여는 괄호 다음에 다시 여는 괄호가 나올 수 있기 때문에 [ex: (())], 괄호의 개수를 int 변수로 카운트 해준다.
    • 여는 괄호 : +1
    • 닫는 괄호 : -1
  • 올바른 괄호는 여는괄호와 닫는괄호 개수가 똑같아야 하기 때문에 마지막에 카운트 변수 값이 0이어야 한다.
  • 앞에서 설명했듯 하나의 괄호 세트는 반드시 닫는괄호 ')' 보다 여는괄호 '(' 가 먼저 나와야 하기 때문에 ')'이 먼저 나오는 경우에는 값이 음수가 된다. (-1) 카운트 변수가 음수(-1)가 나오는 순간 올바르지 않은 괄호기 때문에 바로 false를 반환.
  • 결국 이 문제에서 체크해야 할 것은 아래 두 개 이다.
    • 여는괄호-닫는괄호 개수가 같은지
    • 닫는괄호가 여는괄호 보다 먼전 나오는 경우가 있는지

코드

class Solution {
    boolean solution(String s) {
        int bracket = 0;
        
        for (char ch : s.toCharArray()) {
            if (ch == '(') {
                bracket++;
            } else if (ch == ')') {
                bracket--;
            }
            
            if(bracket < 0) { return false; }
        }

        return bracket == 0 ? true : false;
    }
}

 

Comments