simsimjae   6년 전

아래는 질문게시판에 올라온 정답 자바 코드입니다. 실제로 돌려보시면 정답이라고 나옵니다.

package test;
import java.util.Scanner;
public class test {
    static int x[] = new int[1000000];
    static final int MUL = 1000000;
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int m = Integer.parseInt(scan.nextLine());
        int l = MUL / m;
        int scope[] = new int[m];
        for (int i = 0; i < m; i++) {
            scope[i] = (i + 1) * l;
        }
        String arr[] = scan.nextLine().split(" ");
        for (int i = 0; i < arr.length; i++) {
            x[i] = (int) Math.ceil(MUL * Double.parseDouble(arr[i]));
        }
        int count[] = new int[m];
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < m; j++) {
                if (x[i] < scope[j]) {
                    count[j]++;
                    break;
                }
            }
        }
        for (int i = 0; i < m; i++) {
            System.out.print(count[i] + " ");
        }
    }
}
여기서 3 0.333333을 입력할 경우 1 0 0 이 출력되는게 맞습니다.
0<= 구간1 < 0.3333333333333
0.3333333333333<= 구간2 < 0.6666666... 이기 때문에 1 0 0 이 출력 되는게 정상입니다.
하지만 위 코드를 백준에 제출시 정답이라고 나오는데 3 0.333333입력시 0 1 0 이 출력됨에도 불구하고 정답으로 처리됩니다. 이거 뭔가요?
한 15번정도 틀려서 왜 그런가 했는데 데이터에 오류가 있네요..

djm03178   6년 전

케이스 하나만 가지고 데이터에 오류가 있다고 할 수는 없습니다. 하지만 저런 기본적인 입력에 오답을 출력하는 코드가 정답을 받는다니 데이터가 약한 것 같기는 하네요.

오차를 일절 허용하지 않도록 만든 제 코드가 (물론 저 케이스에 1 0 0을 출력합니다) 정답을 받았으니 데이터가 오류가 있다고 생각되지는 않습니다. 저 케이스 추가 요청은 해도 괜찮을 거 같습니다.

댓글을 작성하려면 로그인해야 합니다.