[백준/12933] 오리 - JAVA

이지환·2024년 1월 14일

알고리즘(백준) 💻

목록 보기
28/80
post-thumbnail

📌 문제

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

🦧 문제 풀이 접근

문자열을 입력받은 후 arraylist를 업데이트한다.

q가 입력 되었을때 : arraylist안에 k가 있으면 해당 index를 q로 업데이트, k가 없으면 q를 새로 추가한다.
u,a,c,k가 입력 되었을때 : arraylist안에 각각의 앞 알파벳이 있으면 입력된 알파벳으로 업데이트, 없으면 -1을 출력하고 종료한다.

💻 code

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'

profile
takeitEasy

0개의 댓글