[C++로 풀이] 괄호 회전하기⭐⭐
Categories: Programmers
Tags: Coding Test Algorithm
📌 괄호 회전하기
난이도 ⭐⭐
🚀 문제
🚀 내 풀이 ⭕
#include <string>
#include <vector>
#include <stack>
using namespace std;
int solution(string s) {
int answer = 0;
for (int i = 0; i < s.length(); ++i) {
stack<char> st;
bool flag = false;
for (int i = 0; i < s.length(); ++i) {
if (s[i] == '[' || s[i] == '{' || s[i] == '(') {
flag = true;
st.push(s[i]);
}
else {
if (s[i] == ']' && st.top() == '[')
st.pop();
if (s[i] == '}' && st.top() == '{')
st.pop();
if (s[i] == ')' && st.top() == '(')
st.pop();
}
}
if (st.empty() && flag) answer++;
/* 괄호 회전 과정 */
char ch = s.front();
s.erase(s.begin());
s.push_back(ch);
}
return answer;
}
괄호 문제만 보면 그냥 바로 스택이 떠오른다..ㅋㅋㅋ 대부분의 괄호 여닫는 코테 문제들은 스택을 사용해야 했었던 것 같다. 아무튼! 여는 괄호일 땐 스택에 추가를 해주고 닫는 괄호가 나타났을 땐 스택의 top
이 짝이 맞는 열린 괄호면 없애주는 식으로 하면 된다. 최종적으로 스택이 전부 비워졌다면 다 짝이 맞는 올바른 괄호 상태인 것이다! 주의해야 할 점은, 열린 괄호가 한번도 등장하지 않는 경우도 올바르지 못한 경우인데 이 경우는 스택에 추가 되는 경우가 없기 때문에 빈 스택 상태로 유지가 된다. 따라서 열린 괄호가 스택에 추가된 적이 한 번이라도 있어야 하고, 동시에 최종적으로 스택이 비어지는! 그런 상태가 될 때 answer
를 카운팅해주면 된다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
Leave a comment