문제 파악

괄호의 열림과 닫힘이 올바른지 확인하는 문제로, 괄호의 개수, 올바른 범위로 설정되었는지 확인하는 과정을 통해서, answer로 boolean 타입 데이터를 리턴한다.

제한사항

입출력 예

s answer
"()()" true
"(())()" true
")()(" false
"(()(" false

접근 방법

  1. 열리고 닫히는 것을 확인할 때, 반드시 ‘(’와 ‘)’의 개수는 같아야 한다.
  2. 여는 기호와 닫는 기호의 개수를 확인할 때, 닫히는 것이 열리는 개수보다 많아지는 시점이 있다면 올바르지 않은 범위이다.

위와 같은 두 가지의 제한점을 확인해보면, 반복문을 통해서 여는 기호와 닫는 기호의 수를 비교하면서, 닫는 기호가 여는 기호의 수보다 많아지는 시점이 있다면 false를 리턴하는 형식으로 진행한다.

문자열의 길이를 한 번 순회하고 종료하기 때문에 **O(n)**의 시간 복잡도를 가지게 된다.

[pseudo-code]

class Solution {
    boolean solution(String s) {
        boolean answer = true;
        int openSign = 0;
        int closeSign = 0;
				
				반복문 String s 내부 순환
					s[i]의 값이 '(' 라면 openSign 값 1 증가
					s[i]의 값이 ')' 라면 closeSign 값 1 증가
				
					closeSign의 값이 openSign의 값보다 크다면 answer = false;
					
				
        반복문이 종료됐다면 openSign과 closeSign의 크기 비교
        만약 크기가 다르다면 answer = false;
        
        return answer;
    }
}

코드 구현