Problem Solving/백준

알고리즘 문제풀이(Java) - 백준 9012번(괄호검사)

돌돌김 2019. 1. 11. 19:52

백준 9012번 괄호검사


소괄호만을 이용하여 괄호검사를 하기 때문에 비교적 쉬운 문제에 속한다.

1. 문제 조건 분석

먼저 첫 줄에 들어오는 숫자가 만큼 괄호를 반복해서 입력받는다. 

입력받은 괄호 문자열이 올바른 괄호의 구성이면 YES, 그렇지 않으면 NO를 출력한다.



2.  변수 선언

num : 첫 줄에서 입력받은 숫자. num 길이 만큼의 배열이 생성

ps 배열 : 입력받은 숫자만큼 괄호를 담을 배열

ps 배열은 다음과 같이 생성된다.

(())())

 (((()())()

(()())((())) 

 ((()()(()))(((())))()

()()()()(()()())() 

(()((())()( 


ans 배열 : YES 또는 NO를 담을 배열. ps배열을 괄호검사 하여 ps[0]이 올바른 괄호이면 ans[0]에 YES 입력

 

 

 

 

 

 



3. 문제 해결

올바른 괄호가 될 조건은  ' ) '이 제대로 있는지에 달려있다.  ' ( '이 아무리 많아도 그에 맞게 ' ) '이 있으면 된다.

ps[0]은 ( ( ) ) ( ) ) 이다. ps[0]은 문자열이기 때문에  charAt을 사용하여 한 문자씩 스택에 넣을 수 있다

이 때 ps[0].charAt[i]가 ' ( ' 일 경우 무조건 스택에 push 한다. 

만약 ps[0].charAt[i[가 ' ) '일 경우 pop()를 하여 꺼낸 괄호가 ' ( '이어야 올바른 괄호조건이라고 볼 수 있다.

하지만 pop()의 결과가 ' ) '일 경우 이는 올바른 괄호조건이 아니므로 ans 배열에 NO를 입력하고 break하여 빠져나온다. 

 

4. 소스 코드