DOLLS 문제 시간초과 해결을 위한 조언좀 부탁드립니다! 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; } 9년 전
0개의 댓글이 있습니다. 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
rnjs3544
DOLLS 문제 바로가기
작성한 방식을 간략히 설명드리면
1. 입력부분에서는 연산을 하지않고 동적할당하여 데이터를 저장만 하였습니다.
2. 각 데이터셋마다 재귀함수로 답을 구하는 작업을 FOR문으로 반복합니다.
소스는 아래와 같구요 실행시간을 어떻게 줄여야할지 감이 안잡힙니다
도와주세요 ㅜㅜ
9년 전