WEIRD 런타임오류 질문드립니다.

  • chaeheesung
    chaeheesung

    << RTE (nonzero return code) >>
    이런 런타임 오류가 나오는데 런타임오류는 어떻게 잡아내는지 모르겠네요..
    코드는 오답으로 나올텐데 런타임오류가 나오니까 답답하네요

    package weird;
    import java.util.Scanner;

    public class Main{

    public static void main(String[] args) {
        int[] weird = new int[200]; //약수판별후 리턴값을 저장할 배열
    
        Scanner testcase = new Scanner(System.in);
        int C = testcase.nextInt();         //테스트 케이스 C입력   
    
        for(int i=1; i<=C; i++){    //C만큼 반복 실행
            Scanner natural_num = new Scanner(System.in);
            int Natural_num;
            Natural_num = natural_num.nextInt();        //자연수 입력
    
            //입력한 자연수의 약수를 판별하고 배열에 저장을 하는데.... 배열저장값을 다른 클래스로 만든다??
            weird[i-1] = Divisors(Natural_num);         //weird[]가 int형이므로 대입시키는 Divisors도 int형 이어야 한다.
    
        }
    
    
        //배열 저장값이 1인것이 약수들의 합으로 본인이 나오는 것이다.
        //배열에 저장되어있는 값을 판단해서 0일 경우 weird 또는 1일 경우 not weird를 출력한다.
        for(int i=0; i<C; i++){
            if(weird[i] == 1)
                System.out.println("not weird");
            else
                System.out.println("weird");
        }       
    }
    
    private static int Divisors(int natural_num) {
        // TODO 자동 생성된 메소드 스텁
        int natnum = natural_num;               //natural_num의 대용품
        int count = 0;
        int natural_count;                      //count의 대용품
        int[] natural = new int[200];           //1~500,000중에서 가장 많은 약수의 갯수를 가진 숫자는 498,960이다.
        int num = 0;                            //약수들의 합조합에서 사용된 약수의 갯수
        int natural_sum = 0;                    //natural[]의 총합, 약수들의 총합
    
        for(int i=1; i<natural_num; i++){
            if(natural_num%i==0){
                natural[count] = i;
                count++;
            }
        }
        natural_count = count;
    
        //n의 약수들이 합조합으로 n이 나오는지 알아본다.
        for(; count>=0; count--){   //count값은 0이 되므로 count를 대체할 natural_count를 선언해줄 필요가 있다.
            if(natural_num - natural[count] < 0)
                natural_num = natural_num;
            else{
                natural_num -= natural[count];
                num++;
            }
    
            if(natural_num == 0)
                break;
        }
    
        //여기서부터 뭔가가 잘못됐다고하네
        //약수들의 총 합을 구한다.
        for(int i=0; i<natural_count; i++){
            natural_sum +=natural[i];
        }
    
        if(natural_num==0){                 //약수들의 합 조합으로 n이 나오는지 확인한다.
            if(natural_sum > natnum)        //약수들의 총 합이 natnum(natural_num)보다 큰지 확인한다.
                return 1;           //not weird
            else
                return 0;           //weird
        }else
            return 0;               //weird
    }

    }


    10년 전
0개의 댓글이 있습니다.
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.