풀이
입력되는 괄호가 쌍을 이루는지 묻는 문제이다. 괄호의 개수가 같아도 항상 쌍을 이루는 것이 아님을 유의하자.
ex) : ( ) ) ) ( ( ( )
stack 구조에서 top변수를 통해 몇 개의 값을 가지고 있는지 알 수 있었다.
이번 문제에서도 top변수를 이용해 '('와 ')'의 구성비를 알아내 문제를 해결할 수 있다.
- '('일 때 top++, ')'일 때 top-- 를 하여 stack 구조를 이용한다. (top == 0 일 때 VPS이다.)
- '('가 ')'보다 적으면 VPS가 아니고 (top == -1), '('가 ')' 보다 많을 때도 VPS가 아니다.(top > 0)
- 따라서 , top가 0이 아니면 VPS가 아님을 알 수 있다.
소스코드
#include <stdio.h>
#include <string.h>
int main() {
int T;
scanf("%d", &T);
while (T--) {
char stack[51], top = 0;
scanf("%s", stack);
for (int i = 0; i < strlen(stack); i++) {
top += (stack[i] == '(' ? 1 : -1);
if (top < 0)
break;
}
puts(top ? "NO" : "YES");
}
}
출처
'PS > Baekjoon Online Judge' 카테고리의 다른 글
[백준 2675] 문자열 반복 [C] (0) | 2021.07.10 |
---|---|
[백준 2577] 숫자의 개수 [C] (0) | 2021.07.10 |
[백준 2562] 최댓값 [C] (0) | 2021.07.09 |
[백준 2557] Hello World [C] (0) | 2021.07.09 |
[백준 2475] 검증수 [C] (0) | 2021.07.09 |