https://school.programmers.co.kr/learn/courses/30/lessons/12909
한글자씩 검사하면서 '(' 가 나오면 num++ ')'가 나오면 num-- 한다. num이 마이너스가 될 경우 바로 false를 반환한다. for문 종료 후 num == 0을 리턴한다.
#include <string>
#include <iostream>
using namespace std;
bool solution(string s)
{
bool answer = true;
int num = 0;
for(char c : s)
{
if(c == '(')
num++;
else
num--;
if(num < 0)
return false;
}
return num == 0;
}
#include<string>
#include <iostream>
#include <stack>
using namespace std;
bool solution(string s)
{
bool answer = true;
stack <char> st;
for(int i =0; i < s.size(); i ++){
if(s[i]== '(') st.push(s[i]);
else if(s[i]==')'){
if(st.empty() || st.top()!='('){
answer = false; break;
}
st.pop();
}
}
if(!st.empty()) answer =false;
return answer;
}
똑같은 풀이는 빼고 2번째 풀이를 가져왔다.
Stack을 이용한건데 '('면 stack에 넣고 ')'를 만나면 스택이 비어있거나 스택의 top이 '('가 아니라면 false를 반환하고 맞으면 stack을 pop한다.