마닐라 2022. 5. 4. 23:59

📍 문제 설명

https://www.acmicpc.net/problem/12933

 

12933번: 오리

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

www.acmicpc.net

 

💡 접근

각 인덱스에서 울고 있는 오리의 울음소리를 최대한 구한다음 다음 인덱스로 넘어가면 최소 오리 수가 나온다.

울음소리가 아닌 경우는 울음소리의 길이가 1.5의 배수가 아니거나 2.'q'로 시작하지않거나 3.1회전 후 idx가 0이 아닐 때 이다.

 

 

👩‍💻 코드

import java.io.*;
import java.util.*;

public class Main {
    public int solution(String str) {
        //울음소리는 5의 배수이고 첫글자가 q가 아니면 올바른 울음소리가 아니다.
        if(str.length() % 5 != 0 || str.charAt(0) != 'q') return -1;
        int answer = 0;
        char[] arr = {'q', 'u', 'a', 'c', 'k'};
        ArrayList<Character> list = new ArrayList<>();
        char[] ch = str.toCharArray();

        for (int i = 0; i < ch.length; i++) list.add(ch[i]);

        while (list.size() >= 5) {
            int idx = 0;
            for (int i = 0; i < list.size(); i++) {
                if (list.get(i) == arr[idx % 5]) {
                    list.remove(i);
                    i--;
                    idx++;
                }
            }
            if(idx % 5 == 0) answer++;
            else return -1;
        }

        //올바른 울음소리가 아니면 사이즈가 0이 아니다.
        if(list.size() != 0) return -1;
        return answer;
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        //StringTokenizer st = new StringTokenizer(br.readLine());
        String str = br.readLine();
        Main s = new Main();
        System.out.println(s.solution(str));
    }
}