올바른 괄호

문제정의


열린괄호와 닫힌괄호로 이루어진 문자열이 올바른 괄호식인지 확인하는 문제이다. 올바른 괄호식이란 열린 괄호와 닫힌 괄호의 수가 동일해야 하며, 열렸으면 반드시 닫혀야한다.

문제풀이


전체 코드는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package level2;

public class CorrectBracket {

//프로그래머스 문제풀이 level2 올바른 괄호

public static void main(String[] args) {
String s = "()()";
boolean answer = true;
int open = 0, close = 0;
char[] arr = s.toCharArray();
for(char c : arr)
{
if(c == '(')
open++;
else
close++;
if(open < close)
{
answer = false;
break;
}
}
if(open != close)
answer = false;

System.out.println(answer);
}

}
열린괄호의 개수를 저장할 변수 open과 닫힌 괄호의 개수를 저장할 변수 close를 선언한다. 이들의 수를 세나가며 만약 close가 open보다 많아지는 경우면 모든 열린괄호가 짝지어지는 것이 아니므로 false를 반환한다. 반복문을 탈출했어도 열린괄호가 닫힌 괄호보다 많은 경우가 있으므로 이를 체크하기 위해 둘의 수가 동일한지 확인한다.

최종 시간복잡도는 문자열의 길이를 n이라 할 때, \(O(n)\)이다.

테스트