Baekjoon
[백준 9012] 괄호
h32j00
2020. 10. 16. 20:26
다른 분들은 배열을 이용해서 풀었길래 카운트만 가지고 풀어봤습니다.
고려할 점
1. '('을 입력받을 때는 아무조건없이 카운트를 센다.
2. ')'을 입력받을 때는 '('의 카운트값과 비교해서 카운트를 센다.
--> 즉, 현재 입력받은 괄호 중에서 여는 괄호보다 닫는 괄호가 많아버리면 그 자리에서 반복문을 끝내고 NO를 출력하게 된다.
다음은 C언어로 작성한 코드입니다.
#pragma warning(disable : 4996)
#include <stdio.h>
int main()
{
int T;
char input[51];
int i, j, o_cnt = 0, c_cnt = 0;
scanf("%d", &T);
for (i = 0;i < T;i++) {
scanf("%s", input);
for (j = 0;j < strlen(input);j++)
{
if (input[j] == '(') o_cnt++;
else {
if ((c_cnt + 1) <= o_cnt) c_cnt++;
else { c_cnt = -1;break; }
}
}
if (o_cnt == c_cnt) printf("YES\n");
else printf("NO\n");
o_cnt = 0;
c_cnt = 0;
}
}
다른 풀이법(스택 이용)
1. 입력받은 '('을 스택에 push한다.
2. ')'가 입력받아지면 스택에서 '('를 pop한다.
3. 입력이 끝나고 스택이 비어있지 않으면 "NO"를 출력한다. (VPS라면 스택의 모든 '('가 pop되어야 정상이기 때문)