[JAVA][WEIRD]질문드려요

  • leun_kcha
    leun_kcha

    안녕하세요
    늦었지만 새해 복 많이 받으세요~~

    열심히 해서 일단 답은 맞는거같은데요
    오답이라고 떠서요 ㅠ.ㅠ
    혹시 어떤게 잘못된건지 말씀해주실수 있으신가요?ㅠ.ㅠ
    부탁드려요 _(__)_

    import java.util.*;
    
    
    public class Main {
    
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            int numOfValue = sc.nextInt();//총라인수
            //입력받는 값은 200보다 같거나 작아야 한다.
            int[] sum = new int[numOfValue]; //약수의 합계
            int[] divCount = new int[numOfValue]; //약수의 갯수
    
            String[] outValue = new String[numOfValue];//결과 출력값
    
            for (int i = 0; i < numOfValue; i++) {
                int inNumber = sc.nextInt();
                sum[i] = 0;
                divCount[i] = 0;
                for (int j = 1; j <= inNumber / 2; j++) {
                    if (inNumber % j == 0) {
                        sum[i] += j;
                        divCount[i] += 1;
                    }               
                }
                //약수의 값 개별로 넣기
                int[] divNum = new int[divCount[i]+1];
                int tempCount = 0; //약수의 입력을 위한 temp++
    
                for (int j = 1; j <= inNumber/2; j++) {
                    if (inNumber % j == 0) {
                        divNum[tempCount] = j;
                        tempCount += 1;
                    }               
                }
    
                //약수의 값이 위어인지 아닌지 비교
                outValue[i] = "weird";//기본값을 weird로 설정
                if (sum[i]<= inNumber) {//약수의 합이 입력값보다 작을경우 not weird
                    outValue[i] = "not weird";              
                }
                //약수의 합이 입력값 보다 클경우 점차적으로 한개씩 빼며 비교를 해간다
                else if ( sum[i] > inNumber ) {
                    for (int j = 0; j < divCount[i]; j++) {
                        //출력값이 not weird 거나 약수의 합이 입력값보다 작아질 경우 for문을 나간다
                        if (outValue[i] == "not weird" || sum[i] <= inNumber) {
                            break;
                        }
                        else{
                            //입력값이 (약수의 합 - [작은값부터]약수)로 돌면서 과 같은지 비교한다.
                            for (int j2 = j; j2 < divCount[i]; j2++) {
                                if (inNumber==(sum[i]-divNum[j2])) {
                                    outValue[i] = "not weird";
                                    break;
                                }
                            }
                        }
                        sum[i] -= divNum[j];//약수의 합이 작은수 부터 한개씩 사라진다.
                    }
                }
            }
    
            for (int i = 0; i < outValue.length; i++) {//출력구문
                System.out.println(outValue[i]);
            }
        }
    
    }
    


    9년 전
2개의 댓글이 있습니다.
  • 일루
    일루

    가능한 subset의 종류가 프로그램에서 체크하는 것보다 더 많을 것 같습니다.


    9년 전 link
  • leun_kcha
    leun_kcha

    아....감사합니다 일루님 ㅠ.ㅠ


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