프로그래머스에도 나왔던 문제이다.
그래서 이번에는 스택으로 풀려 했다... 하지만 풀려고 코드를 적다 보니 굳이 그래야 하나.. 싶었다.
똑같이 숫자 세는 방식으로 했다. (어차피 스택과 비슷한 원리라고 생각한다.)
#include <iostream>
#include <string>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n;
cin >> n;
for (int i = 0; i < n; ++i)
{
int count = 0;
string line, output = "YES";
cin >> line;
for (char c : line)
{
if (c == '(')
count++;
else
{
count--;
if (count < 0)
{
output = "NO";
break;
}
}
}
if (count > 0)
output = "NO";
cout << output << '\n';
}
return 0;
}
문제가 발생하는 이유는 )이 (보다 많거나 끝난 시점에서 (이 많을 때이다. (의 개수를 세워주며 )이 나타나면 감소시켜주고 0 이하일 경우 )이 (보다 많다는 뜻이므로 NO를 출력하게 해주며 문자열을 다 돌았는데도 (이 남았다면 문제가 있다는 뜻이므로 NO를 출력하게 해준다.
실수로 답안 제출에 예제 입력 1을 입력해버렸다... 이러면 틀린 문제가 되는 건가?