728x90
개요
위 포스팅에서 풀었던 프로그래머스: 로또의 최고 순위와 최저 순위 문제에서 "다른 풀이"로 Arrays.binarySerach라는 메서드를 사용한 방법도 알아보았습니다.
몰랐던 메서드이기 때문에 정리하고자 합니다.
Arrays.binarySearch메서드란❓
Arrays.binarySearch()는 Java에서 제공하는 Arrays 클래스의 메서드로, 배열 내에서 특정 요소를 이진 탐색(binary search)하여 해당 요소가 있는 위치를 반환하는 메서드입니다.
이 메서드는 이진 탐색 알고리즘을 사용하기 때문에, 배열이 정렬되어 있어야 정확한 결과를 얻을 수 있습니다.
사용 방법
Arrays.binarySearch(배열, 검색할_값);
- 배열
- 탐색 대상이 되는 배열. 배열은 반드시 정렬되어 있어야 합니다.
- 검색할_값
- 배열에서 찾고자 하는 값.
반환 값
- 양수
- 검색한 값이 배열에 존재하면, 그 값이 위치한 인덱스를 반환합니다.
- 음수
- 검색한 값이 배열에 존재하지 않으면, 예상 삽입 위치에 대한 음수 값을 반환합니다. 즉, -(삽입 위치 + 1)을 반환합니다.
사용 예시
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] arr = {1, 3, 5, 7, 9};
// 배열은 미리 정렬되어 있어야 합니다.
int index = Arrays.binarySearch(arr, 5);
System.out.println("5의 인덱스: " + index); // 출력: 2 (5는 arr[2]에 위치)
int notFoundIndex = Arrays.binarySearch(arr, 6);
System.out.println("6의 예상 삽입 위치: " + notFoundIndex); // 출력: -4
// 6은 배열에 없지만, 삽입 위치는 arr[3]이므로 -(3 + 1) = -4가 반환됩니다.
}
}
그런데 해당 포스팅에서 보았던 코드에서는 정렬을 안해도 정답을 구할 수 있는 이유는 이진 탐색(Binary Search) 같은 효율적인 탐색 방법을 사용하지 않고, 단순한 이중 반복문을 사용해 배열 내에서 값을 직접 비교하고 있기 때문입니다.
즉, lottos 배열의 각 요소가 win_nums 배열의 모든 요소와 일일이 비교되기 때문에 배열이 정렬되어 있지 않아도 모든 값을 확인할 수 있습니다.
'TIL,일일 회고' 카테고리의 다른 글
[TIL, 일일 회고] 2024.10.01 - SQL dialect is not configured 에러 해결하기 (0) | 2024.10.01 |
---|---|
[TIL, 일일 회고] 2024.09.30 - Jmeter 한글 버전으로 변경하기 (0) | 2024.09.30 |
[TIL, 일일 회고] 2024.09.28 - 프로그래머스 Lv.1 : 로또의 최고 순위와 최저 순위(Java) (0) | 2024.09.28 |
[TIL, 일일 회고] 2024.09.27 - Git: 'fatal: couldn't find remote ref' 오류 해결하기 (0) | 2024.09.27 |
[TIL, 일일 회고] 2024.09.26 - 제곱근을 이용한 효율적인 약수 계산 방법 (0) | 2024.09.26 |