728x90
728x90
https://www.acmicpc.net/problem/9012
난이도: solved.ac 실버 4
괄호 문자열이 VPS가 아닌 경우는 아래와 같다
(case 1) 문자열 내의 '('의 개수가 ')'의 개수와 다를 때
(case 2) 문자열의 괄호를 하나씩 보며 개수를 세다가 ')'의 개수가 앞의 '(' 개수보다 많아질 때
첫 번째 조건은 당연한거니 설명하지 않겠다
두 번째 조건의 예시는 다음과 같다
Ex. (case 2)
( | ( | ) | ) | ) | ( |
위의 문자열에서 '('와 ')'의 개수는 서로 같다
하지만 ')'의 개수가 '('의 개수보다 많아지는 순간이 있다
( | ( | ) | ) | ) | ( |
다섯 번째 괄호 기호에서 ')'의 개수가 '('의 개수보다 많아지게 된다
그러면 뒤의 문자들은 볼 필요도 없이 올바르지 않은 괄호 문자열이라는 걸 알 수 있다
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main() {
int T, t, i, len;
scanf("%d", &T);
char st[51];
int left = 0, right = 0; // left: '('의 개수, right: ')'의 개수
for (t = 0; t < T; t++) {
scanf("%s", st);
len = strlen(st);
for (i = 0; i < len; i++) {
if (st[i] == '(') left++;
else if (st[i] == ')') right++;
if (right > left)
break;
}
if (left != right)
printf("NO\n");
else
printf("YES\n");
left = 0; // '('의 개수 초기화
right = 0; // ')'의 개수 초기화
}
}
반응형