RTE (nonzero return code)-Java 도와주세요..ㅠ

  • User Avatar
    euihyeok.lee

    시작한지 얼마 안되서 [[problem:WEIRD]] 문제를 풀고 있습니다.
    그동안 C로 풀다가 이 문제는 hashset의 유혹에 Java로 풀었는데요,
    RTE 에러 관련해서 좀 찾아보고 이방법 저방법 다써봤는데..
    안되네요.. 고수님들의 도움 부탁드립니다. ㅠ

    또는 C에서 Hashset 처럼 간단한 가변크기의 O(1) 탐색이 가능한 무공이 있다면 팁을 부탁드려도 될런지요..?
    ~~~ java
    package com.Algospot.Weird;

    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.Scanner;

    public class Main {
    static int tk = 0;
    static int divisors[];
    private static Scanner scan;
    static HashSet orig;
    static HashSet tempset;
    public static void main(String[] args) {
    scan = new Scanner(System.in);
    orig=new HashSet();
    tempset=new HashSet();
    divisors=new int[50];
    int cases = scan.nextInt();
    while (cases-- > 0) {
    boolean flag=false;
    for(int i=0;i<divisors.length;i++) divisors[i]=0;
    int num = scan.nextInt();
    devide(num);
    if(isexeed(num))
    if(verify(num))
    flag=true;
    if(flag==true) System.out.println("weird");
    else System.out.println("not weird");
    }
    }

    private static boolean verify(int num) {
        orig.clear();
        for(int i=0;i<tk;i++){
            if(orig.isEmpty()){
                orig.add(divisors[i]);
                continue;
            }
            Iterator<Integer> key=orig.iterator();
            tempset.clear();
            while(key.hasNext()){
                int sumnum=key.next();
                tempset.add(sumnum+divisors[i]);
            }
            if(tempset.contains(num)||orig.contains(num)) return false;
            else orig.addAll(tempset);
        }
        return true;
    }
    
    static void devide(int n) {
        tk = 0;
        for (int i = 1; i <= (n / 2); i++)
            if (n % i == 0)
                divisors[tk++] = i;
    }
    static boolean isexeed(int num){
     int i=0,sum=0;
     for(i=0;i<tk;i++){
         sum+=divisors[i];
     }
     if(sum>num) return true;
     else return false;
    

    }

    }
    ~~~


    11년 전
4개의 댓글이 있습니다.
  • User Avatar
    nosiar

    [[알고스팟 온라인 저지/첫 번째 문제 풀기]]를 참조하세요.


    11년 전 link
  • User Avatar
    euihyeok.lee

    패키지 명을 빼고 해도 여전히 RTE 에러가 나네요..


    11년 전 link
  • User Avatar
    euihyeok.lee

    약수 배열이 50인게 문제였네요.. 제일 많은 약수(약200개) 기준으로 잡았더니 RTE는 통과했는데 이젠 momory exceed가..
    근데 암만 봐도 65MB는 안넘게 생겼는데 이상하네요..
    HashSet이 제일 많이 잡힐때가 약 50만개 쫌 안되는데, int*50만 해도 괜찮은데.. 아.. 어렵네요..


    11년 전 link
  • User Avatar
    일루

    isexeed가 계속 false면 tempset이 초기화가 안되지 않나요? 대충만 봐서 잘 모르겠지만;;


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