알고리즘 문제풀이/프로그래머스
[프로그래머스/Level 2] 괄호 회전하기 (C++)
노력의천재
2021. 4. 16. 14:29
programmers.co.kr/learn/courses/30/lessons/76502
코딩테스트 연습 - 괄호 회전하기
programmers.co.kr
문자열 s의 크기만큼 괄호를 왼쪽으로 한칸씩 회전하면서 스택을 이용하여 올바른 괄호인지 검증하는 문제였습니다.
#include <string>
#include <vector>
#include <stack>
using namespace std;
// 괄호를 왼쪽으로 한칸 회전
string rotate(string str) {
string res = str;
char tmp = res[0];
res.erase(0, 1);
res.push_back(tmp);
return res;
}
// 올바른 괄호인지 검증
bool isCorrect(string str) {
stack<char> st;
for(int i = 0; i < str.size(); i++) {
if(str[i] == '(' || str[i] == '{' || str[i] == '[') {
st.push(str[i]);
} else {
if(st.empty()) return false;
else {
if(st.top() == '(' && str[i] == ')') st.pop();
else if(st.top() == '{' && str[i] == '}') st.pop();
else if(st.top() == '[' && str[i] == ']') st.pop();
}
}
}
if(!st.empty()) return false;
return true;
}
int solution(string s) {
int answer = 0;
if(isCorrect(s)) answer++;
for(int i = 1; i < s.size(); i++) {
s = rotate(s);
if(isCorrect(s)) answer++;
}
return answer;
}