ALLERGY(알러지가 심한 친구들)에서 오답을 찾을수가 없습니다. ghost3320 BFS방식으로 다음과 같이 풀었습니다. 나름 만들어본 테스트케이스는 모두 만족하는데.. 도저히 오답을 찾을수가 없습니다. 고수님들의 조언부탁드립니다 #include <iostream> using namespace std; int friendCnt[50],foodCnt[50]; bool friendCheck[50]; string friendList[50][50]; int foodFriedCnt[50][50]; int foodFried[50][50][50]; int queue[5000][50]; int queueItem[5000]; int queuePreIndex = 0; int queueIndex = 0; int queueSize = 5000; int* valueList; int queueItemSize; void push(int* item, int size) { queueItem[queueIndex%queueSize] = size; int* target = queue[queueIndex%queueSize]; for(int i = 0; i <size; i++ ) { target[i] = item[i]; } queueIndex++; } void pop() { int* data = queue[queuePreIndex%queueSize]; valueList = data; queueItemSize = queueItem[queuePreIndex%queueSize]; queuePreIndex++; } bool isAccept(int tcIndex, int* valList, int queueSize) { for(int j = 0; j < friendCnt[tcIndex]; j++) { friendCheck[j] = false; } for(int i = 0; i < queueSize; i++) { int friendCnt2 = foodFriedCnt[tcIndex][valList[i]]; for(int j = 0; j < friendCnt2; j++) { friendCheck[foodFried[tcIndex][valList[i]][j]] = true; } } for(int j = 0; j < friendCnt[tcIndex]; j++) { if(!friendCheck[j]) { return false; } } return true; } int searchFoods(int tcIndex) { int newItem[50]; while(queuePreIndex != queueIndex) { pop(); // quq에서 pop if(queueItemSize > foodCnt[tcIndex]){ return -1; } else if(isAccept(tcIndex,valueList,queueItemSize)) { return queueItemSize; } else { for(int i = 0; i < queueItemSize; i++) { newItem[i] = valueList[i]; } for(int i = valueList[queueItemSize-1]+1; i < foodCnt[tcIndex]; i++) { //인접 리스트 push newItem[queueItemSize] = i; push(newItem,queueItemSize+1); } } } return 0; } int main(int argc, char** argv) { int tcCount,index = 0; cin >> tcCount; string userName; while(index<tcCount) { cin >> friendCnt[index] >> foodCnt[index]; for(int i = 0; i < friendCnt[index]; i++) { cin >>friendList[index][i]; } for(int i = 0; i < foodCnt[index]; i++) { cin >> foodFriedCnt[index][i]; for(int j = 0; j < foodFriedCnt[index][i]; j++) { cin >> userName; for(int k = 0; k < friendCnt[index]; k++) { if(userName.compare(friendList[index][k])==0) { foodFried[index][i][j] = k; break; } } } } index++; } index = 0; while(index<tcCount) { int firstArr[1]; for(int i = 0; i < foodCnt[index]; i++) { firstArr[0] = i; push(firstArr,1); } cout <<searchFoods(index)<<endl; index++; queuePreIndex = 0; queueIndex = 0; } return 0; } 8년 전
0개의 댓글이 있습니다. 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
ghost3320
BFS방식으로 다음과 같이 풀었습니다.
나름 만들어본 테스트케이스는 모두 만족하는데..
도저히 오답을 찾을수가 없습니다.
고수님들의 조언부탁드립니다
8년 전