https://school.programmers.co.kr/learn/courses/30/lessons/76502#
스택을 통해 해결할 수 있는 문제
여는 괄호가 나오면 스택에 넣고 닫는 괄호가 나오면 짝인지 확인하고 스택에서 제거
만약 짝이 아니라면 올바른 괄호가 아니기 때문에 반복 종료
또한 스택이 비어있다면 닫는 괄호가 먼저 나온것이기 때문에 반복 종료
마지막으로 올바른 괄호 수 증가 전에 스택이 비어있는지 확인해야함
그렇지 않으면 여는 괄호 닫는 괄호 짝이 나온 후 닫는 괄호가 나오면 올바른 괄호로 인식할 수 있기 때문이다.
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
int solution(string s) {
int answer = 0;
int n = s.length();
for(int i = 0;i<n;i++){
vector<char> v;
bool isClear = true;
for(int j = 0;j<n;j++){
if(s[j] == '[' || s[j] == '(' || s[j] == '{'){
v.push_back(s[j]);
}
else{
if(v.empty()){
isClear = false;
break;
}
char vc = v.back();
if((vc == '{' && s[j] == '}')||(vc == '(' && s[j] == ')')||(vc == '[' && s[j] == ']'))
v.pop_back();
else{
isClear = false;
break;
}
}
}
if(isClear && v.empty())
answer++;
s.push_back(s[0]);
s.erase(s.begin());
}
return answer;
}
'Programmers Review' 카테고리의 다른 글
[Lv 3] 네트워크 (0) | 2024.07.09 |
---|---|
[Lv 2] n^2 배열 자르기 (0) | 2024.07.09 |
[Lv 2] 귤 고르기 (0) | 2024.07.04 |
[Lv 2] 영어 끝말잇기 (0) | 2024.07.04 |
[Lv 2] 예상 대진표 (0) | 2024.07.04 |