[Java] 백준 12933 오리

Lee GaEun·2025년 5월 23일

[Java] 알고리즘

목록 보기
81/93

12933 오리 문제 링크

#1

import java.awt.*;
import java.io.*;
import java.util.*;
import java.util.List;

class Main {
    static char[] list;
    static boolean[] visited;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        String a = br.readLine();
        list = new char[a.length()];
        visited = new boolean[a.length()];
        for(int i=0; i<a.length(); i++) {
            list[i] = a.charAt(i);
        }

        int answer = 0;
        int c = 0;
        for(int i=0; i<a.length(); i++) {
            c = findD();
            if(c==0) break;
            if(c%5==0) answer++;
            else {
                answer=-1;
                break;
            }
        }
        answer = answer==0 ? -1 : answer;
        bw.write(answer+"");

        bw.flush();
        bw.close();
    }

    static int findD() {
        int now = 0;
        for(int i=0; i<list.length; i++) {
            if(now%5 == 0 && list[i]=='q' && !visited[i]) {
                visited[i] = true;
                now++;
            } else if (now%5 == 1 && list[i]=='u' && !visited[i]) {
                visited[i] = true;
                now++;
            } else if (now%5 == 2 && list[i]=='a' && !visited[i]) {
                visited[i] = true;
                now++;
            } else if (now%5 == 3 && list[i]=='c' && !visited[i]) {
                visited[i] = true;
                now++;
            } else if (now%5 == 4 && list[i]=='k' && !visited[i]) {
                visited[i] = true;
                now++;
            }
        }
        return now;
    }
}
  • 반례 찾기가 힘듦
  • quackquuuuuuack가 반례
  • findD 함수에서 now의 나머지를 조건으로 사용해서 q가 처음에 오면서 나머지가 없는 경우는 체크해 주는데 다른 문자가 처음에 오면서 나머지가 없는 경우는 아예 체크를 안 함

#2

import java.awt.*;
import java.io.*;
import java.util.*;
import java.util.List;

class Main {
    static char[] list;
    static boolean[] visited;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        String a = br.readLine();
        list = new char[a.length()];
        visited = new boolean[a.length()];
        for(int i=0; i<a.length(); i++) {
            list[i] = a.charAt(i);
        }

        int answer = 0;
        int c = 0;
        for(int i=0; i<a.length(); i++) {
            c = findD();
            if(c==0) break;
            if(c%5==0) answer++;
            else {
                answer=-1;
                break;
            }
        }
        for(int i=0; i<a.length(); i++) {
            if(!visited[i]) answer = -1;
        }
        answer = answer==0 ? -1 : answer;
        bw.write(answer+"");

        bw.flush();
        bw.close();
    }

    static int findD() {
        int now = 0;
        for(int i=0; i<list.length; i++) {
            if(now%5 == 0 && list[i]=='q' && !visited[i]) {
                visited[i] = true;
                now++;
            } else if (now%5 == 1 && list[i]=='u' && !visited[i]) {
                visited[i] = true;
                now++;
            } else if (now%5 == 2 && list[i]=='a' && !visited[i]) {
                visited[i] = true;
                now++;
            } else if (now%5 == 3 && list[i]=='c' && !visited[i]) {
                visited[i] = true;
                now++;
            } else if (now%5 == 4 && list[i]=='k' && !visited[i]) {
                visited[i] = true;
                now++;
            }
        }
        return now;
    }
}

  • 힘겹게 풀음
  • visited를 체크해서 위 경우 체크함
profile
I will give it my all (๑•̀o•́๑)ง

0개의 댓글