문제
https://www.acmicpc.net/problem/9012
풀이
VPS의 조건을 생각해 보았다 .
- ( 의 개수와 ) 개수가 같아야 한다.
- 마지막 문자가 반드시 ) 여야 한다.
- 어떤 경우도 )가 (보다 많을 수 없다.
- ((()))...는 세번째 문자열까지 ( 는 3개, )는 0개지만 VPS일 가능성이 있다.
- 하지만 )... 이나 (()))... 가 된다면 뒷 문자열을 볼 필요 없이 VPS가 아니다.
조건을 세운 후 간단한 정수로 (와 )를 적절히 카운팅하여 풀었다.
- count = 0로 셋팅한다.
- ( 일 때, count를 1씩 증가시킨다.
- )일 때, count를 1씩 감소시킨다.
- count가 0이 아니면 NO를 출력 시킨다.
소스
#include <iostream>
#include <string>
#include <cstring>
int main()
{
int T = 0; std::cin >> T;
while(T--)
{
int count = 0;
char buf[100]; std::cin>>buf;
int size = strlen(buf);
for(int i=0; i < size; ++i)
{
if(buf[i]=='(') ++count;
else --count;
if(count <0) break;
}
if(count == 0) std::cout << "YES\n";
else std::cout << "NO\n";
if(T==0) break;
}
return 0;
}