이 알고리즘 문제는 인프런의 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 (김태원)의 문제입니다.
문제 설명
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class sec06_08 {
public static int solution(int[] arr, int M) {
Arrays.sort(arr);
return Arrays.binarySearch(arr, M) + 1;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
int[] arr = new int[N];
for (int i = 0; i < N; ++i) arr[i] = Integer.parseInt(st.nextToken());
System.out.println(solution(arr, M));
}
}
이진탐색 구현
public static int solution(int[] arr, int M) {
Arrays.sort(arr);
int lPtr = 0; int rPtr = arr.length - 1;
while(lPtr <= rPtr)
{
int mid = (lPtr + rPtr) / 2;
if(arr[mid] == M) return mid + 1;
else
{
if(arr[mid] > M) rPtr = mid - 1;
else lPtr = mid + 1;
}
}
return -1;
}
설명
- 이진 탐색을 수행하기 위해서는 배열이 반드시 정렬되어 있어야 한다.
- 이진 탐색은 정렬된 배열에서 중앙값을 기준으로 탐색 범위를 줄여나가는 방식이기 때문에, 정렬되지 않은 배열에서는 제대로 작동하지 않는다.
- Arrays.binarySearch(arr, M)는 arr 배열에서 값 M을 찾는 이진 탐색 메서드이다. 반환 값은 M의 인덱스이다.
만약 M을 찾지 못한다면 음수를 반환한다.
'자료구조 & 알고리즘 > Inflearn' 카테고리의 다른 글
[인프런 알고리즘] Chapter 6, 9번 문제(뮤직비디오- 결정알고리즘) (0) | 2024.08.23 |
---|---|
[인프런 알고리즘] Chapter 6, 7번 문제(좌표 정렬) (0) | 2024.08.21 |
[인프런 알고리즘] Chapter 6, 6번 문제(장난꾸러기) (0) | 2024.08.20 |
[인프런 알고리즘] Chapter 6, 5번 문제(중복 확인) (0) | 2024.08.18 |
[인프런 알고리즘] Chapter 06, 4번 문제(Least Recently Used) (0) | 2024.08.17 |