알고리즘/BOJ

백준 3986번 좋은 단어

꾸준함. 2018. 9. 8. 00:58

문제 링크입니다: https://www.acmicpc.net/problem/3986


문제가 조금 난해하지만 결국 알파벳끼리 쌍을 이룰 때 사이에 다른 알파벳이 없을 경우가 좋은 단어입니다.


알고리즘은 아래와 같습니다.

1. 스택이 비어 있지 않은 상태에서 스택의 top과 현재 알파벳이 같을 경우 한 쌍을 이루므로 스택에서 pop합니다.

2. 1번이 아닌 경우에는 쌍을 이루지 않기 때문에 스택에 push합니다.

3. 해당 문자열을 전부 순회한 뒤 스택이 비어있다면 좋은 단어, 비어 있지 않다면 좋은 단어가 아닙니다.


#include <iostream>

#include <string>

#include <stack>

using namespace std;

 

int main(void)

{

        ios_base::sync_with_stdio(0);

        cin.tie(0);

        int N;

        cin >> N;

 

        int result = 0;

        for (int i = 0; i < N; i++)

        {

                 string str;

                 cin >> str;

 

                 stack<char> s;

 

                 for (int j = 0; j < str.length(); j++)

                 {

                         //이전 알파벳과 현재 알파벳이 같은 경우 한 쌍

                         if (!s.empty() && s.top() == str[j])

                                 s.pop();

                         else

                                 s.push(str[j]);

                 }

                

                 if (s.empty())

                         result++;

        }

        cout << result << "\n";

        return 0;

}

 


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

'알고리즘 > BOJ' 카테고리의 다른 글

백준 1918번 후위표기식  (2) 2018.09.08
백준 1725번 히스토그램  (0) 2018.09.08
백준 12931번 두 배 더하기  (0) 2018.09.08
백준 5397번 키로거  (2) 2018.09.07
백준 9935번 문자열 폭발  (2) 2018.09.06