본문 바로가기

백준

12933 오리

https://youtu.be/MtN1YnoL46Q

 

문제 풀면서 들었던 노래

빰빰빰 빰 빠바 밤~

 

 

상태를 관리하면서 오리 소리의 개수를 세면 된다

정확히 꽥만 세야 하는데 꽥괙꽥 이런 경우 체크해줘야 한다 (마지막 예시)

 

 

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <deque>
#include <stack>
#include <set>
#include <map>
#include <cmath>
#include <cstring>
#include <bitset>
#include <stdio.h>

#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()

using namespace std;
using i64 = long long int;
using ii = pair<int, int>;
using iis = pair<int, string>;
using ii64 = pair<i64, i64>;
using iii = tuple<int, int, int>;
 
int main() {
    string s;
    cin >> s;
    
    
    vector<bool> checkQuack(s.size());
    int duckNum = 0;
    
    for (int k = 0; k < s.size(); k++) {
        int state = 0;
        bool isThereDuck = false;
        stack<int> st;
        
        for (int i = k; i < s.size(); i++) {
            if (checkQuack[i])
                continue;
            
            switch (state) {
                case 0:
                    if (s[i] != 'q')
                        continue;
                    state = 1;
                    st.push(i);
                    break;
                case 1:
                    if (s[i] != 'u')
                        continue;
                    state = 2;
                    st.push(i);
                    break;
                case 2:
                    if (s[i] != 'a')
                        continue;
                    state = 3;
                    st.push(i);
                    break;
                case 3:
                    if (s[i] != 'c')
                        continue;
                    state = 4;
                    st.push(i);
                    break;
                case 4:
                    if (s[i] != 'k')
                        continue;
                    st.push(i);
                    isThereDuck = true;
                    
                    while( !st.empty() ) {
                        checkQuack[st.top()] = true;
                        st.pop();
                    }
                    
                    state = 0;
                    break;
            }
        }
        if(isThereDuck)
            duckNum++;
        while( !st.empty() ) st.pop();
    }
    
    
    for (int i = 0; i < checkQuack.size(); i++) {
        if (!checkQuack[i]){
            printf("-1\n");
            return 0;
        }
    }
    
    printf("%d", duckNum == 0 ? -1 : duckNum);
    
    return 0;
}

'백준' 카테고리의 다른 글

1002 터렛  (0) 2021.08.05
1015 수열 정렬  (0) 2021.08.04
1018 체스판 다시 칠하기  (0) 2021.08.01
2567 색종이 - 2  (0) 2021.08.01
2018 수들의 합 5  (0) 2021.08.01