문제 풀면서 들었던 노래
빰빰빰 빰 빠바 밤~
상태를 관리하면서 오리 소리의 개수를 세면 된다
정확히 꽥만 세야 하는데 꽥괙꽥 이런 경우 체크해줘야 한다 (마지막 예시)
#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 |