이전에 풀었던 올바른 괄호와 매우 유사한 문제이다.
이번 문제는 문자열 S에 같은 알파벳 2개가 연달아있다면 가능한 모두 제거하여 문자열 S에 남은 알파벳이 있는지 없는지 확인하는 문제이다. 이번 문제 역시 Stack을 이용하여 풀었는데, 내 풀이는 밑에와 같다.
s문자열(배열)을 탐색하는 포문을 이용해
1. stack이 비어있으면 해당 pivot의 알파벳을 push 한다.
2. 다음 pivot에 해당하는 단어가 stack top에 있는 단어와 일치하면 pop 수행
3. 다음 pivot에 해당하는 단어가 stack top에 있는 단어와 일치하지 않는다면 해당 pivot의 알파벳을 또 push 한다.
위의 1 ~ 3 단계를 for문이 문자열s 순회가 끝날 때까지 반복 하며, 순회가 끝났을 때 stack에 비었는지 여부로 문자들이 모두 제거 되었는지 확인했습니다.
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int solution(string s)
{
stack<char> st;
int answer = 0;
for (int i = 0 ; i < s.size(); i++)
{
if (st.empty())
st.push(s[i]);
else
{
if(st.top() == s[i])
{
st.pop();
}
else
st.push(s[i]);
}
}
if (st.empty())
answer = 1;
return answer;
}