티스토리 뷰

algo/백준

[백준] 12933_오리 (JAVA)

이숨니 2022. 6. 27. 15:31

1. 문제

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

 

12933번: 오리

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

www.acmicpc.net


 

2. 문제 이해

오리가 최소 몇 마리 우는지 구하기 

한 마리가 많이 울 수도 있어서 나는 2중 for문 써서 돌려줘서 매번 확인해줬다.

예를 들어

quqacukqauackck라는 울음소리가 들어오면 

quackquack

quack 

이렇게 확인해줘서 cnt 로 울음소리 check 하였다.

 

 

3. 풀이 방법

1. 울음소리 문자열을 character로 바꿔줘서 char 배열에 넣어줬다.

2. duck = { 'q', 'u', 'a', 'c', 'k' }; 배열과 입력받은 울음소리 배열만큼 boolean 배열을 만들어줘서,

3. 2중 for문 돌면서 해당값이 방문 안 했던 울음소리 배열이 duck 배열의 순서를 지켰는지 (즉, 울었는지) 확인해주기

4. 맞게 울었으면 list에 넣어주기 

5. 매번 for이 끝나고 list 마지막 값이 'k'가 아니면 제대로 운 게 아니니깐 return -1 해주기

 

주의할 점은 첫 번째 값이 'q'로 시작하지 않거나, 울음소리 배열의 길이가 5의 배수가 아닌 경우는 무조건 return -1 해줘야 함!

 

4. 코드

package net.acmicpc.solution;

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

public class Solution_12933_오리 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		char[] str = br.readLine().toCharArray(); // 울음소리 배열
		boolean[] v = new boolean[str.length];
		int k = 0;
		char[] duck = { 'q', 'u', 'a', 'c', 'k' };
		int cnt = 0;
		if (str[0] != 'q' || str.length % 5 != 0) {
			System.out.println(-1);
			return;
		}

		for (int i = 0; i < str.length; i++) {
			ArrayList<Character> list = new ArrayList<>();
			for (int j = i; j < str.length; j++) {
				if (!v[j] && str[j] == duck[k]) {
					k++;
					list.add(str[j]);
					v[j] = true;
					if (k == 5)
						k = 0;
				}
			}
			// System.out.println(list);
			if (list.size() != 0) {
				if (list.get(list.size() - 1) != 'k') {
					System.out.println(-1);
					return;
				}

				cnt++;

			}

		}
		System.out.println(cnt);

	}
}

 

피드백은 언제나 환영입니다 :) 🌳

댓글