본문 바로가기

백준/구현

오리

728x90

www.acmicpc.net/problem/12933

 

12933번: 오리

첫째 줄에 영선이가 녹음한 소리가 주어진다. 소리의 길이는 5보다 크거나 같고, 2500보다 작거나 같은 자연수이고, 'q','u','a','c','k'로만 이루어져 있다.

www.acmicpc.net

#include <iostream>
#include <algorithm>
#include <string>
#include <deque>

using namespace std;

string str;
deque<int> deq;
int check[2502], duck;
int sound[] = { 'q', 'u', 'a', 'c', 'k' };

void go(int quack, int idx, int c) {
	if (idx >= str.size()) {
		return;
	}
	if (str[idx] == sound[quack] && check[idx] == 0) {
		deq.push_back(idx);
		if (sound[quack] == 'k') {
			if (c == 0) {
				duck = duck + 1;
				c = 1;
			}
			while (!deq.empty()) {
				check[deq.front()] = 1;
				deq.pop_front();
			}
		}
		if (quack == 4) {
			quack = 0;
		}
		else {
			quack = quack + 1;
		}
	}
	go(quack, idx + 1, c);
}

int main() {

	cin >> str;
	for (int i = 0; i < str.size(); i++) {
		if (str[i] == 'q' && check[i] != 1) {
			go(0, i, 0);
		}
	}
	for (int i = 0; i < str.size(); i++) {
		if (check[i] == 0) {
			cout << -1 << endl;
			return 0;
		}
	}
	if (duck == 0 || (str.size() % 5 != 0)) {
		cout << -1 << endl;
		return 0;
	}
	cout << duck << endl;
	return 0;
}

'백준 > 구현' 카테고리의 다른 글

지뢰찾기  (0) 2021.04.15
빙고  (0) 2021.04.15
소가 길을 건너간 이유  (0) 2021.04.05
로봇  (0) 2021.04.02
병든 나이트  (0) 2021.03.27