여는 괄호보다 닫는 괄호가 많아지면 안 되는 것이 규칙이다. 만약 닫는 괄호가 여는 괄호보다 많아지면 false를 반환하고 모두 확인했는데 괄호의 짝이 안 맞는다면 false를 반환하면 된다.
#include <string>
using namespace std;
bool solution(string s)
{
int left = 0, right = 0;
bool answer = true;
for (char c : s)
{
if ('(' == c)
{
++left;
}
else
{
++right;
if (right > left)
return false;
}
}
if (right != left)
return false;
return true;
}
left, right로 나누어 괄호를 세고 닫는 괄호를 셀 때 여는 괄호보다 많으면 잘못된 것으로 false를 반환해준다. 모든 반복문을 돌고 난 뒤 left와 right가 다를 시 짝이 안 맞는 것이니 false를 반환한다.
조건문에서 안 걸러졌다면 문제가 없다는 것으로 true를 반환한다.