알고리즘
백준 12933번 오리 (JAVA)
박카스마시며코딩
2023. 10. 31. 17:07
https://www.acmicpc.net/problem/12933
12933번: 오리
첫째 줄에 영선이가 녹음한 소리가 주어진다. 소리의 길이는 5보다 크거나 같고, 2500보다 작거나 같은 자연수이고, 'q','u','a','c','k'로만 이루어져 있다.
www.acmicpc.net
저는 구현을 통해 문제를 해결하였습니다.
2중 for문을 사용하였고, 내부의 for문을 통해 한마리가 낼 수 있는 소리를 모두 찾았고, 이를 for문을 돌려 모든 오리의 최소 마리수를 찾았습니다.
quack가 모두 나와야 하고, 중간에 끊기면 안되기에 입력의 길이가 5의 배수인지를 확인하고, 모든 문자를 사용했는지까지 판단하여 문제를 해결하였습니다.
package BOJ.etc;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class BOJ_12933 {
private static final char[] QUACK = {'q','u','a','c','k'};
private static final int NOT_FOUND = -1;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int size = str.length();
if(str.length() % 5 != 0){
System.out.println(NOT_FOUND);
return;
}
boolean[] used = new boolean[size];
int result = 0;
int quackIndex = 0;
for(int i = 0 ; i < size ; i++) {
boolean flag = false;
for (int j = i; j < size; j++) {
if(used[j]){
continue;
}
char ch = str.charAt(j);
if (QUACK[quackIndex] == ch) {
flag = true;
used[j] = true;
quackIndex++;
quackIndex %= 5;
}
}
if(quackIndex != 0) {
System.out.println(NOT_FOUND);
return;
}
if(flag){
result++;
}
}
for(int i = 0 ; i < size ; i++){
if(!used[i]){
System.out.println(NOT_FOUND);
return;
}
}
System.out.println(result);
}
}