티스토리 뷰
https://www.acmicpc.net/problem/9012
#include <stdio.h>
#include <string.h>
int main(void)
{
int t = 0; //테스트케이스
scanf("%d", &t);
while(t--)
{
char s[52] = ""; //char s[52] = {0}; 문자열 배열 초기화
scanf("%s", s); //입력
int left = 0; // ( 갯수
int right = 0; // ) 갯수
int len = strlen(s); //문자열 길이
int i = 0;
for(i = 0; i<len; i++)
{
if(s[i] == '(') left++; //갯수 증가
if(s[i] == ')') right++; //갯수 증가
if(left<right) { //만약 오른쪽 개수가 더 많다면 VPS가 아니다.
printf("NO\n");
break;
}
} //VPS이러면 (, )의 개수가 같으며, 왼쪽에서 오른쪽으로 이동 시에 )이 (보다 많아서는 안된다
if(i==len && left==right) printf("YES\n");
if(i==len && left!=right) printf("NO\n");
}
return 0;
}
풀이
VPS 조건
1. '('와 ')'의 개수는 같아야 한다.
2, 왼쪽에서 오른쪽으로 이동하면서, ')'의 개수가 '('을 초과해서는 안된다.
left은 '('의 개수, right은 ')'의 개수로 보면,
ex) (()())
left = 1 -> left = 2 -> left = 2, right = 1-> left = 3, right = 1 -> left = 3, right = 2 -> left = 3, right = 3이므로
위의 VPS 조건을 만족한다.
ex) ()))((()
left = 1 - > left = 1, right = 1 -> left =1, right = 2 이므로
VPS조건의 2을 위배되므로, 위의 괄호들은 VPS가 아니다!!!
ex) (((())
이 경우는 (이 더 많으므로 VPS가 아니다!!! (VPS조건의 1을 위배)
'c언어 > BAEKJOON' 카테고리의 다른 글
c언어 11866번 요세푸스 문제 0 (백준) (4) | 2022.06.01 |
---|---|
c언어 14719번 빗물 (백준) (0) | 2022.06.01 |
c언어 10986번 나머지 합 (백준) (0) | 2022.05.29 |
c언어 1038번 감소하는 수 (백준) (0) | 2022.05.29 |
c언어 1912번 연속합 (백준) (0) | 2022.05.26 |
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 16120번
- 스택
- 백준
- 그래프
- java
- DFS
- C++
- Mo.s
- 누적합
- union
- DP
- Krustal
- BFS
- C언어
- find
- 그리디
- 누적 합
- 1835
- 덱
- 최소 스패닝 트리
- 최대공약수
- 6198
- 정렬
- 플로이드
- 카드
- 오프라인 쿼리
- 6198번
- 트리
- 세그먼트 트리
- 1835번
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함