문제를 풀다가, 나는 들여쓰기가 3개 이하로 잘 줄여지지 않아서 다른 사람의 풀이를 보았다.
#include <string>
#include <iostream>
#include <vector>
using namespace std;
bool solution(string s)
{
bool answer = true;
// '('이 나오면 push, ')'이 나오면 pop을 함 (empty일 경우 pop이 안 되므로 false)
// 모든 문자를 다 돌았는데도 empty가 아니면 남았다는 의미이므로 false
vector<int> stack;
for(char c: s)
{
if(c == '(')
{
stack.push_back(1);
}
else if(c == ')')
{
if(stack.empty())
answer = false;
else
stack.pop_back();
}
}
if(!stack.empty()) answer = false;
return answer;
}
#include<string>
#include <iostream>
using namespace std;
bool solution(string s)
{
int n = 0;
for (int i = 0; i < s.length(); i++) {
if (n < 0)
return false;
if (s[i] == '(')
n++;
else if (s[i] == ')')
n--;
}
return n == 0;
}
나는 벡터로 접근했지만, 다른 풀이는 단순 정수 연산을 사용했다.
그러면서 초반에 정수가 음수로 변하는 순간 false로 처리하여, 굳이 연속 if문을 쓰지 않도록 했다.