반응형
올바른 괄호인지 체크하는 문제이다.
실제로 작성하는 cpp 코드를 생각하면 쉽다.
코드를 작성할 때, 열린 괄호 '('를 썼다면 반드시 닫힌 괄호 ')'를 써야한다.
즉, 열린 괄호를 +1, 닫힌 괄호를 -1이라고 생각한다면 마지막에는 반드시 0이 되어야 한다.
열린 괄호 뒤에는 다시 열린 괄호 또는 닫힌 괄호가 와야한다.
그러므로, 괄호가 완전히 닫히기 전에 닫힌 괄호가 열린 괄호보다 많아서는 안된다.
#include <stdio.h>
int main(void)
{
int T;
scanf("%d", &T);
for (int tc = 0; tc < T;tc++)
{
int i, flag, sp;
char str[50 + 5];
flag = sp = i = 0;
scanf("%s", str);
while (str[i])
{
if (str[i] == '(') sp++; /* 열렸으면 + */
else --sp; /* 닫혔으면 - */
if (sp < 0) /* 완전히 닫히기 전 까지 닫힌 괄호가 많은지 체크 */
{
flag = 1;
break;
}
i++;
}
if (flag == 1 || sp != 0) printf("NO\n");
else printf("YES\n");
}
return 0;
}
반응형
'알고리즘 > BAEKJOON' 카테고리의 다른 글
BOJ 14501, 15486 : 퇴사, 퇴사 2 (0) | 2021.02.15 |
---|---|
BOJ 10866 : 덱 (0) | 2021.02.08 |
BOJ 10845, 18258 : 큐, 큐2 (0) | 2021.02.07 |
BOJ 10773 : 제로 (0) | 2021.02.06 |
BOJ 10828 : 스택 (3) | 2021.02.05 |
댓글