Hello

: )

2016년 4월 24일 일요일

알고리즘 문제 풀이에서의 qsort 사용 주의점


에 있는 sample code 에서는 아래와 같은 예제코드가 있는데,
이 코드를 그대로 사용하면 알고리즘 문제 풀이시에는 문제가 될 수 있습니다.

qsort 의 마지막 인자로 필요한 compare 함수 예제 코드
 int compare (const void * a, const void * b)  
 {  
   return ( *(int*)a - *(int*)b );  
 }  


문제의 경우에는 입력값을 sort 해야 하는데, qsort 함수에 필요한 compare 함수 구현시에 예제코드를 그대로 사용하면  overflow 로 문제가 틀리게 됩니다.
문제 본문에 int 범위 전체를 사용하는 입력값을 언급했는데, 별 생각없이 넘어간 게 문제였고, 이런 주의사항은 절대 지나쳐서는 안 되는 사항임을 자주 잊게 되네요. -_-

compare 함수 parameter 설명에 있는 그대로 구현해야 문제가 없게 됩니다.

 int compare(const void* a, const void* b) {  
   if (*(int *)a < *(int *)b) {  
     return -1;  
   }  
   else if (*(int *)a == *(int *)b) {  
     return 0;  
   }  
   else {  
     return 1;  
   }  
 }  





댓글 1개:

  1. 정확하게 백준 해당 문제에서 해당 코드를 사용해서 틀렸네요.
    감사합니다.

    답글삭제