스택을 다룰때 자주 실수하는 것
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

+ Recent posts