ZEROONE
ZeroOne 문제를 풀었지만 계속 오답이 발생합니다.
경계값, 초과값 등 여러가지를 입력에도 옳은 대답이 나오는걸 보니 아마도 알고리즘 작성에서 오답이 난 것같습니다.
제 알고리즘은 1과 0의 비교를 통한 최대값 최소값을 구하는 것이 아니라, 1이 최소값인 경우와 0이 최대값인 경우만 생각하여 1111 or 0000 의 문자열과 비교를 하는 알고리즘을 만들었습니다.
이런 알고리즘 같은 경우에는 문제의 의도와 벗어나는 것인가요?
public class ZeroOne {
public static void main(String arg[]) throws IOException{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String zeroOneArray = "";
zeroOneArray = in.readLine();
int numQuestion = Integer.parseInt(in.readLine());
String[] range ;
range = new String[numQuestion];
for(int i=0; i < numQuestion ; i++){
range[i] = in.readLine();
}
for(int i=0; i < numQuestion ; i++){
comparison(zeroOneArray, range[i]);
}
}
//비교 메서드
//입력 : zeroone array, 비교 범위
//비교방식: 범위 내 zero one array이가 1또는 0으로만 이루어져 있는지 비교
//출력 : 1또는 0으로만 이루어져 있으면 Yes, 섞여있으면 No
static void comparison(String array, String range){
StringTokenizer st = new StringTokenizer(range);
int token1 = Integer.parseInt(st.nextToken());
int token2 = Integer.parseInt(st.nextToken());
if (token1 > token2){
int temp = token1;
token1 = token2;
token2 = temp;
}
token2++;
String StringOne = ((int)Math.pow(10,token2-token1)-1)/9 + "";
String StringZero = ((int)Math.pow(10,token2-token1) +"").substring(1);
if (token2 > array.length()){
System.out.println("No");
}
else if(array.substring(token1, token2).equals(StringOne) || array.substring(token1, token2).equals(StringZero)){
System.out.println("Yes");
}
else{
System.out.println("No");
}
}
}
SLoVey
ZEROONE
ZeroOne 문제를 풀었지만 계속 오답이 발생합니다.
경계값, 초과값 등 여러가지를 입력에도 옳은 대답이 나오는걸 보니 아마도 알고리즘 작성에서 오답이 난 것같습니다.
제 알고리즘은 1과 0의 비교를 통한 최대값 최소값을 구하는 것이 아니라, 1이 최소값인 경우와 0이 최대값인 경우만 생각하여 1111 or 0000 의 문자열과 비교를 하는 알고리즘을 만들었습니다.
이런 알고리즘 같은 경우에는 문제의 의도와 벗어나는 것인가요?
아래는 java로 작성한 코드 전문입니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class ZeroOne {
public static void main(String arg[]) throws IOException{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String zeroOneArray = "";
zeroOneArray = in.readLine();
int numQuestion = Integer.parseInt(in.readLine());
String[] range ;
range = new String[numQuestion];
for(int i=0; i < numQuestion ; i++){
range[i] = in.readLine();
}
for(int i=0; i < numQuestion ; i++){
comparison(zeroOneArray, range[i]);
}
}
//비교 메서드
//입력 : zeroone array, 비교 범위
//비교방식: 범위 내 zero one array이가 1또는 0으로만 이루어져 있는지 비교
//출력 : 1또는 0으로만 이루어져 있으면 Yes, 섞여있으면 No
static void comparison(String array, String range){
StringTokenizer st = new StringTokenizer(range);
int token1 = Integer.parseInt(st.nextToken());
int token2 = Integer.parseInt(st.nextToken());
if (token1 > token2){
int temp = token1;
token1 = token2;
token2 = temp;
}
token2++;
String StringOne = ((int)Math.pow(10,token2-token1)-1)/9 + "";
String StringZero = ((int)Math.pow(10,token2-token1) +"").substring(1);
if (token2 > array.length()){
System.out.println("No");
}
else if(array.substring(token1, token2).equals(StringOne) || array.substring(token1, token2).equals(StringZero)){
System.out.println("Yes");
}
else{
System.out.println("No");
}
}
}
10년 전