자라는 개발자/문제풀이

백준 c++ 3986 좋은 단어

자란다 2022. 1. 26. 00:44
728x90
반응형

3986 좋은 단어

문제 풀이

#include <iostream>
#include <stack>
using namespace std;
void fast_io(void)
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
}
int main()
{
    fast_io();
    int n, res = 0;
    cin >> n;
    while (n--)//입력받은만큼 돈다
    {
        string str;
        stack<char> s;
        cin >> str;//문자열 입력받음 
        s.push(str[0]); //하나를 넣은상태로 시작 
        for (int i = 1; i < str.size(); i++)
        {
            if (!s.empty() && str[i] == s.top()) 
            {//비어있지 않고, 현재 char 가 스택의 top과 같을때 
                s.pop();
            }
            else
            {//같지않다면 스택에 추가
                s.push(str[i]);
            }
        }
        if (s.empty())//비어있다면 다 짝맞춰 나간거니까 세어주기++
            res++;
    }
    cout << res;
}

어떤 방법이 좋을까 고민하다가 우선 스택에 0번을 넣고 시작하기로 했다.
그 후 들어오는 char가 앞선아이와 같다면 pop() 다르다면 push를 하며
짝맞는애만 탈출하게 해주었다. 결과적으로 다 나갔다면 스택은 비어있기 때문에 비어있는 경우만 결과값에 더해주었다.

728x90
반응형

'자라는 개발자 > 문제풀이' 카테고리의 다른 글

백준 c++ 2292 벌집  (0) 2022.01.29
백준 c++ 17952 과제는 끝나지 않아!  (1) 2022.01.26
백준 c++ 1487 물건 팔기  (0) 2022.01.25
백준 c++ 1120 문자열  (0) 2022.01.24
백준 C++ 1439 뒤집기  (0) 2022.01.23