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를 체크해서 위 경우 체크함