gpejvkdlf17   1년 전

Collections.binarySearch() 는 찾으려는 값이 없으면 음수(-(insertion point)-1), 있으면 인덱스를 return 해주고,

이 때 찾으려는 값이 탐색 대상이 되는 배열(또는 리스트 등) 내에 1개 이상 존재한다면

존재하는 위치 중 가장 먼저 찾은 인덱스를 return 해 주는 것으로 알고있습니다.

아래 코드에서, 

탐색 대상이 되는 정렬된 리스트를 listB, 찾으려는 값을 value 라고 할 때,

value가 listB에 없는 경우는 진행 하지 않고,

value가 listB에 있는 경우 (반환된 인덱스가 0 이상의 정수인 경우) 

인덱스를 좌우로 넓혀가며

listB.get(좌)==value 를 만족하는 가장 왼쪽의 인덱스와

listB.get(우)==value 를 만족하는 가장 오른쪽의 인덱스를 각각 구해서

(우-좌)+1 의 누적합을 정답으로 판단했습니다.

이 방식 자체에는 문제가 없다고 생각하는데,

혹시 아래 코드에 제가 식별하지 못한 예외나 오류가 있을까요?

luizy991212   1년 전

존재하는 수 중에서 아무위치가 출력됩니다. 그래서 저는 찾은 위치중 가작 작은값만 출력 할 수 있게 코드를 새로 짰습니다.

제 코드 참고가 될까해서 남겨놓습니다.

https://github.com/LuizyHub/Be...

다만, 이문제는 HashMap을 이용하는게 가장 효율적일거같아요.

luizy991212   1년 전

이건 자바에서 지원하는 BinarySerach입니다.

* multiple elements with the specified value, there is no guarantee which
* one will be found.

9,10번째 문장과같이 어떤 위치를 반환할지는 보장되지 않는다고하네요

gpejvkdlf17   1년 전

오.. 제가 잘못 알고 있었군요! 감사합니다

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