혜랑's STORY

[BOJ_C++] 3986번: 좋은 단어 본문

무지성 공부방/알고리즘 해결

[BOJ_C++] 3986번: 좋은 단어

hyerang0125 2022. 9. 30. 23:39

CODE

#include <bits/stdc++.h>
using namespace std;

int main()
{

    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int n, sum = 0;
    string str;
    bool check;

    cin >> n;
    for(int i=0; i<n; i++){
        stack<char> s;
        cin >> str;

        for(int j=0; j<str.length(); j++){
            if(s.empty()) s.push(str[j]);
            else if(str[j] == 'A'){
                if(s.top() == 'A') s.pop();
                else{
                    s.push(str[j]);
                }
            }
            else if(str[j] == 'B'){
                if(s.top() == 'B') s.pop();
                else{
                    s.push(str[j]);
                }
            }
        }
        if(s.empty()) sum++;
    }

    cout << sum;

    return 0;
}

문제 풀이

  1. 만약 스택이 비어있다면 이어줄 문자가 존재하지 않는 것이므로 스택에 현재 문자를 push 한다.
  2. 만약 현재 문자가 'A'라면
    1. 스택의 top이 'A'일 때 쌍이 지어지므로 pop한다.
    2. 'A'가 아니면 쌍이 아니므로 스택에 현재 문자를 push한다.
  3. 만약 현재 문자가 'B'라면 'A'와 마찬가지로 'B'일때와 아닐때로 구분하여 진행한다.
  4. 문자열이 끝났는데 스택이 비어있다면 모두 짝이 지어진 것이므로 좋은 문자이다. (sum++)

결과

'무지성 공부방 > 알고리즘 해결' 카테고리의 다른 글

[BOJ_C++] 7576번: 토마토  (0) 2022.10.06
[BOJ_C++] 10026번: 적록색약  (0) 2022.10.05
[BOJ_C++] 10799번: 쇠막대기  (0) 2022.09.30
[BOJ_C++] 2493번: 탑  (0) 2022.09.29
[BOJ_C++] 11003번: 최솟값 찾기  (0) 2022.09.28