다른 분들은 배열을 이용해서 풀었길래 카운트만 가지고 풀어봤습니다.
고려할 점
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되어야 정상이기 때문)
'Baekjoon' 카테고리의 다른 글
[백준 10845] 큐 (0) | 2021.02.12 |
---|---|
[백준 10773] 제로 (0) | 2021.02.12 |
[백준 1920] 수 찾기 (0) | 2020.10.16 |
[백준 1181] 단어 정렬 (0) | 2020.10.05 |
[백준 1032] 명령 프롬프트 (0) | 2020.09.29 |