DOLLS 문제 시간초과 해결을 위한 조언좀 부탁드립니다!

  • rnjs3544
    rnjs3544

    DOLLS 문제 바로가기
    작성한 방식을 간략히 설명드리면
    1. 입력부분에서는 연산을 하지않고 동적할당하여 데이터를 저장만 하였습니다.
    2. 각 데이터셋마다 재귀함수로 답을 구하는 작업을 FOR문으로 반복합니다.

    소스는 아래와 같구요 실행시간을 어떻게 줄여야할지 감이 안잡힙니다
    도와주세요 ㅜㅜ

    #include <string>
    #include <sstream>
    #include <iostream>
    using namespace std;
    
    void doll_distribute(int** iArr, int* iDonate, int i, int j, int cnt, int m, int n)
    {
        if(cnt!=m)
        {
            if(iArr[i][j] == 0)
                doll_distribute(iArr, iDonate, i, (j+1)%n, cnt, m, n);
            else
            {
                iArr[i][j]--;
                iDonate[j]++;
                doll_distribute(iArr, iDonate, i, (j+1)%n, cnt+1, m, n);
            }
        }
    }
    
    int main(void)
    {
        //입력부
        int T;  //data quantity (1<=T<=50)
        try{
            cin >> T;
            if(T<1 || T>50)
                throw;
            cin.ignore(80,'\n');//입력 버퍼 제거
        }
        catch(...){
            cout<<"invalid input"<<endl;
            return -1;
        }
    
        string sTmp;
        istringstream iss;
        char cBuf[100]={0};
        int i=0,j=0;
        int** iArr = new int*[T];
        int* n = new int[T];
        int* m = new int[T];
    
    
        for(i=0; i<T; i++)
        {
            cin.getline(cBuf,sizeof(cBuf));
            sTmp.assign(cBuf);
            iss.str(sTmp);
            iss >> n[i] >> m[i];
            iss.clear();
    
            iArr[i] = new int[n[i]];
    
            cin.getline(cBuf,sizeof(cBuf));
            sTmp.assign(cBuf);
            iss.str(sTmp);
            for(j=0; j<n[i]; j++)
            {
                iss >> iArr[i][j];
            }
            iss.clear();
        }
        //연산 및 출력
        for(i=0; i<T; i++)
        {
            int* iDonate = new int[n[i]];
            for(j=0; j<n[i]; j++)
                iDonate[j] = 0;
            doll_distribute(iArr, iDonate, i, 0, 0, m[i], n[i]);
            for(j=0; j<n[i]; j++)
                cout << iDonate[j] << " ";
            cout<<endl;
            delete[] iDonate;
        }
    
        //동적할당 해제
        for(i=0; i<T; i++)
        {
            delete[] iArr[i];
        }
        delete [] iArr;
        delete [] n;
        delete [] m;
    
    
        return 0;
    }
    

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