
알고리즘 분류 : 그리디
난이도 : 실버3
출처 : 백준 - 오리




문자열을 입력받은 후 arraylist를 업데이트한다.
q가 입력 되었을때 : arraylist안에 k가 있으면 해당 index를 q로 업데이트, k가 없으면 q를 새로 추가한다.
u,a,c,k가 입력 되었을때 : arraylist안에 각각의 앞 알파벳이 있으면 입력된 알파벳으로 업데이트, 없으면 -1을 출력하고 종료한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int quackArr[] = new int[5];
boolean errorFlag = false;
String line = br.readLine();
ArrayList<Character> arrayList = new ArrayList<>();
for(int i=0;i<line.length();i++) {
if(arrayList.isEmpty()) {
if(line.charAt(i)=='q')
arrayList.add('q');
else
errorFlag = true;
}
else if(line.charAt(i)=='q') {
boolean checkEndQuack = false;
for(int j=0;j<arrayList.size();j++) {
if(arrayList.get(j)=='k') {
arrayList.set(j,'q');
checkEndQuack=true;
break;
}
}
if(!checkEndQuack) {
arrayList.add('q');
}
}
else if(line.charAt(i)=='u') {
boolean checkEndQuack = false;
for(int j=0;j<arrayList.size();j++) {
if(arrayList.get(j)=='q') {
arrayList.set(j,'u');
checkEndQuack=true;
break;
}
}
if(!checkEndQuack) {
errorFlag=true;
break;
}
}
else if(line.charAt(i)=='a') {
boolean checkEndQuack = false;
for(int j=0;j<arrayList.size();j++) {
if(arrayList.get(j)=='u') {
arrayList.set(j,'a');
checkEndQuack=true;
break;
}
}
if(!checkEndQuack) {
errorFlag=true;
break;
}
}
else if(line.charAt(i)=='c') {
boolean checkEndQuack = false;
for(int j=0;j<arrayList.size();j++) {
if(arrayList.get(j)=='a') {
arrayList.set(j,'c');
checkEndQuack=true;
break;
}
}
if(!checkEndQuack) {
errorFlag=true;
break;
}
}
else if(line.charAt(i)=='k') {
boolean checkEndQuack = false;
for(int j=0;j<arrayList.size();j++) {
if(arrayList.get(j)=='c') {
arrayList.set(j,'k');
checkEndQuack=true;
break;
}
}
if(!checkEndQuack) {
errorFlag=true;
break;
}
}
}
if(errorFlag || arrayList.contains('q') || arrayList.contains('u') || arrayList.contains('a') || arrayList.contains('c'))
System.out.println(-1);
else
System.out.println(arrayList.size());
}
}

그리디 알고리즘 기초 문제이다. 하지만 여러 에러처리 사항이 존재하므로 -1이 출력되는 경우를 잘 확인해야 한다. ex) 'qqqqq', 'quackq'