WEIRD 문제 풀이 도움 부탁드립니다.

  • dacchur
    dacchur

    아래 코드와 같이 구현했는데요.
    계속 오답이라고 나오네요.
    가지고 있는 샘플로는 답이 맞는데,
    계속적으로 오답이라 어디가 틀렸는지를 모르겠습니다.

    도움 부탁드리겠습니다.

    조합을 사용하여 각 원소들의 합을 더한후 입력값과 비교했고요.
    조건도 맞는거 같은데, 고수님들 도와주세요~

    #include <iostream>
    #include <list>
    
    using namespace std;
    
    int N;
    bool judge;
    
    bool Addresult(int* result, int size){
      int total = 0;
      for(int i=0;i<size;i++){
        total += result[i];
      }
      if(total == N)
        return true;
      else
        return false;
    }
    
    void Combination(int n, int r, int original_r, int* temp_result, int* src) {
      if ( r == 0 ){
        if(Addresult(temp_result, original_r))
          judge = true;
      } else if ( n < r ) {
        return;
      } else {
        temp_result[r-1] = src[n-1];
        Combination(n-1, r-1, original_r,temp_result,src);
        Combination(n-1, r, original_r,temp_result,src);
      }
    }
    
    bool Judge(int size, int* tmp_arr, int* arr){
      judge = false;
      for(int i=3; i<size;i++){
        Combination(size,i,i,tmp_arr,arr);
        if(judge == true){
          return true;
        }
      }
      return false;
    }
    
    int main()
    {
      int cmd_cnt = 0;  
      cin >> cmd_cnt;
    
      while(cmd_cnt--) {
        list<int> arrInt;
        cin >> N;
    
        int* pArr = 0;
        int cnt = 0;
        int total = 0;
    
        for(int i = 1; i<N/2+1; i++){
          if(N%i == 0){
            arrInt.push_back(i);
          }
        }
    
        pArr = new int[arrInt.size()];
        list<int>::iterator it = arrInt.begin();
        list<int>::iterator it_end = arrInt.end();
    
        for(it; it != it_end; it++){
          pArr[cnt++] = *it;
          total += *it;
        }
    
        if(total <= N){
          cout << "not_weird" << endl;
          continue;
        }
    
        int* pTmp = new int[cnt];
    
        if(Judge(cnt,pTmp,pArr)){
          cout << "not weird" << endl;
        } else {
          cout << "weird" << endl;
        }
    
        delete[] pTmp;
        delete[] pArr;    
      }
      return 0;
    }
    


    10년 전
3개의 댓글이 있습니다.
  • Kureyo
    Kureyo

    코드은 자세히 안읽어봤는데..
    cout << "not_weird" << endl;
    _가 빠져야할거같네요


    10년 전 link
  • Being
    Being

    슬쩍 봤는데 왠지 중간에 문자열 하나랑 그 앞 조건 부등호가 의심이 가는데요 ㅎㅎ


    10년 전 link
  • dacchur
    dacchur

    아~ 감사합니다.
    문자열 문제였네요.^^ 눈이 어두워서..ㅠㅠ
    답변들 감사합니다.


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