9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net

예제 입력 1
6
(())())
(((()())()
(()())((()))
((()()(()))(((())))()
()()()()(()()())()
(()((())()(
예제 출력 1
NO
NO
YES
NO
YES
NO
예제 입력 2
3
((
))
())(()
예제 출력 2
NO
NO
NO
- 스택을 사용하여 풀 수도 있지만, 간단한 방법이 있다.
- cnt 변수를 두고 0으로 시작하여 '(' 이면 증가시키고 ')'이면 감소시킨다. 최종적으로 cnt == 0이면 올바른 괄호이다.
- 단, cnt == 0일 경우라도 올바른 괄호가 아닌 경우가 있다.
ex. )(()
따라서, 조건이 하나 더 필요한데, cnt가 0보다 작으면 현재 열린괄호 수보다 닫힌 괄호 수가 더 많다는 의미이므로, 잘못된 괄호로 판정하면 된다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
const int MAX_SIZE = 55;
int main(void)
{
int TC = 0;
scanf("%d", &TC);
while (TC-- > 0)
{
char input[MAX_SIZE + 1];
int cnt = 0;
scanf("\n%s", input);
for (int i = 0; input[i]; i++)
{
if (input[i] == '(') cnt++;
else if (input[i] == ')') cnt--;
if (cnt < 0) break;
}
if (cnt == 0)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
'Algorithm > 문제풀이' 카테고리의 다른 글
[Leetcode] Duplicate Zeros (0) | 2021.06.26 |
---|---|
[Leetcode] Squares of a Sorted Array (0) | 2021.06.26 |
[Brute Force] 캠프 준비 (0) | 2020.03.05 |
[Brute Force] 두 스티커 (0) | 2020.03.04 |
[Brute Force] 나3곱2 (0) | 2020.03.04 |