kimsy96   6년 전

간단한 이분탐색문제입니다.

재귀코드를 쓰지 않고 간단하게 bsearch 함수를 구현했습니다.

bsearch 함수는 값이 있으면 그 있는 값의 인덱스를, 없으면 -1을 출력하게끔 했습니다.

arr1에 n개의 숫자를 입력받은 뒤 qsort 함수를 이용하여 정렬하고, arr2의 인자를 하나씩 입력받아 bsearch해서 

인덱스의 리턴값을 기준으로 0 인지 1인지를 정했습니다.

딱..히 오류는 없는거 같은데 어디서 에러가 났을까요 

kimsy96   6년 전

이문제와 똑같은 10815의 경우 (출력형태만 한줄로 출력, 배열의 크기만 100000->500000으로 바꿔주면 되는 문제) 저 코드를 내면 정답처리됩니다.

왜 이런 걸까요..

kimsy96   6년 전

언어를 바꾸고 이분탐색을 재귀적으로 바꿔서(함수를 새로짜서) 하니까 정답은 나오는데.. 저코드도 틀린게 없는데 참 이상하네요 

doju   6년 전

https://ideone.com/1PXNl0

비교 함수에서 integer overflow가 일어나 정렬이 제대로 되지 않습니다.

kimsy96   6년 전

음..그런가요

그러면 10815는 왜 정답처리 된건지 모르겠네요..;;

djm03178   6년 전

10815는 정수의 범위가 마이너스 천만에서 플러스 천만이므로 한쪽에서 한쪽을 빼도 여전히 int 범위에 들어갑니다.

하지만 이 문제는 범위가 int형 전체입니다. -21억에서 10억을 빼면 -31억이 되지 않습니다. int의 범위를 초과하기 때문입니다.

kimsy96   6년 전

아...                          그렇군요 감사합니다

댓글을 작성하려면 로그인해야 합니다.