반응형
<문제 소개>
<소스 코드>
#include<string>
#include <iostream>
using namespace std;
bool solution(string s)
{
bool answer = true;
int count = 0;
for(int i = 0; i < s.size(); i++)
{
char c = s[i];
if(c == '(') count++;
if(c == ')')
{
if(--count < 0) return false;
}
}
if(count > 0) answer = false;
return answer;
}
<풀이과정>
1. '('와 ')'의 갯수를 세서 같은 경우에만 올바른 것이므로 해당 경우를 찾아야한다.
2. 먼저 갯수를 셀 count 변수를 선언하고, 문자열 s를 반복하여 각 문자들을 탐색한다.
3. 문자가 '(' 인 경우는 count를 증가시키고 다음 반복으로 넘어간다.
4. 문자가 ')' 인 경우에는 앞서서 '('가 온 경우에만 올 수 있기 때문에 count를 먼저 감소시켜보고, 해당 count가 0보다 작으면 필요한 '(' 의 갯수가 충분하지 않은 경우이므로 false를 바로 리턴해준다.
5. 모든 탐색이 끝나고 난 뒤, 괄호가 올바르게 짝지어졌다면 count가 0이 되야하므로 count가 0보다 큰지를 검사해 크다면 answer을 false로 바꿔준다.
6. 결과값 answer를 리턴한다.
<코멘트>
예전에 백준인가 어디서 풀어봤던 문제여서 좀 더 쉽게 푼 것 같다.
그래도 2단계치곤 조금 난이도가 낮은 느낌이다.(1단계 정답률 낮은 문제가 더 어려운 듯)
<제출결과>