BRAVEDUCK 문제 오답소스 좀 봐주세요. 구희재 //왜 오답이 나오는지 모르겠습니다. //몇시간 고민했는데 도와주세요.. //불가능한 테스트케이스를 알고싶습니다. #include <iostream> using namespace std; typedef struct Q{ int x; int y; }MyQueue; MyQueue q[10001]; int front = 0; int rear = 0; void inqueue(int a, int b) { q[front].x = a; q[front++].y = b; } int* dequeue() { int ret[2] = { 0, }; ret[0] = q[rear].x; ret[1] = q[rear++].y; return ret; } double pow2(int x) { return x*x; } bool sol(int s[], int e[], int jump, int dol[][3], int num) { int otp = 0; inqueue(s[0], s[1]); int esc = 0; while (front != rear) { int *check = dequeue(); int rcheck[2] = { 0, }; rcheck[0] = check[0]; rcheck[1] = check[1]; int egap = pow2((e[0] - rcheck[0])) + pow2((e[1] - rcheck[1])); if (jump*jump >= egap) { esc = true; break; } for (int j = 0; j < num; j++) { int gap = pow2((dol[j][0] - rcheck[0])) + pow2((dol[j][1] - rcheck[1])); if (jump*jump >= gap) { if (dol[j][2] != 1) { inqueue(dol[j][0], dol[j][1]); dol[j][2] = 1; } } else{ esc = false; } } } return esc; } int main() { //note int testcase = 0; cin >> testcase; for (int i = 0; i < testcase; i++) { int jump = 0; cin >> jump; int start[2] = { 0, }; int end[2] = { 0, }; cin >> start[0] >> start[1]; cin >> end[0] >> end[1]; int dolnum = 0; cin >> dolnum; int dol[101][3] = { 0, }; for (int j = 0; j < dolnum; j++) { cin >> dol[j][0] >> dol[j][1]; } // input int val = sol(start, end, jump, dol, dolnum); if (val == true) cout << "YES" << endl; else cout << "NO" << endl; //END //초기화 for (int k = 0; k < front; k++) { q[k].x = q[k].y = 0; } front = 0; rear = 0; } return 0; } ~~~ (빈 줄) 8년 전
2개의 댓글이 있습니다. seico75 불가능한 case 보다는 dequeue 함수 때문이 아닌가 합니다. ret 는 내부 변수라서 스택에 잡히는데 포인터로 리턴하면 그 값이 유지된다는 보장이 없습니다. ret 를 static 으로 잡아서 테스트 해보심이.. 8년 전 link 구희재 답변 감사합니다. 덕분에 해결했습니다ㅠㅠ 8년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
구희재
//왜 오답이 나오는지 모르겠습니다.
//몇시간 고민했는데 도와주세요..
//불가능한 테스트케이스를 알고싶습니다.
8년 전