스택을 다룰때 자주 실수하는 것
st.top() 을 접근하기 전에, !st.empty() 스택이 비어있지 않은지 확인해야 한다.
#include <bits/stdc++.h>
using namespace std;
int n, answer;
string word;
bool check(string input){
stack<char> st;
int slen = input.length();
if (slen % 2 == 1) return false;
st.push(input[0]);
for(int i = 1; i < slen; i++){
if(!st.empty() && st.top() == input[i]) st.pop();
else st.push(input[i]);
}
if(st.empty()) return true;
else return false;
}
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
while(n--){
cin >> word;
if (check(word)) answer++;
}
cout << answer;
return 0;
}
짝이 맞으려면 문자열 길이가 일단 짝수여야 한다.
문자열을 길이만큼 인덱스로 순회한다.
스택의 제일 위의 top 글자가 현재 인덱스 글자와 같으면, top을 pop시킨다.
현재 인덱스 글자 와 다르면, 현재 인덱스 글자를 push한다.
순회가 끝났을 때 스택이 비어있어야 좋은 단어다.
728x90
'알고리즘 > 백준' 카테고리의 다른 글
쇠막대기 백준 10799번 c++ (0) | 2022.02.13 |
---|---|
괄호 백준 9012번 c++ (0) | 2022.02.13 |
Hasing 백준 15829번 c++ (0) | 2022.02.11 |
시리얼 번호 백준 1431번 c++ (0) | 2022.02.10 |
곱셈 백준 1629번 c++ (0) | 2022.02.09 |