📌 문제 설명
N개의 자연수가 주어지고, 이 수들을 오름차순 정렬한 뒤 이 중 특정 수 M이 몇 번째에 존재하는지 이분 탐색(Binary Search)으로 찾아야 합니다.
- 중복된 숫자는 존재하지 않음
- 정렬 후 이분 검색을 통해 위치를 찾음
📝 입력 & 출력
입력
- 첫 줄에 자연수 N(3≤N≤1,000,000)과 찾고자 하는 수 M이 주어진다.
- 둘째 줄에 N개의 자연수가 공백으로 구분되어 주어진다.
출력
- 오름차순 정렬 후 M이 존재하는 위치(1부터 시작하는 인덱스) 출력
🔹 예제 입력 & 출력
예제 입력
8 32
23 87 65 12 57 32 99 81
예제 출력
3
💡 해결 방법
- 배열을 오름차순으로 정렬한 후 이분 탐색을 수행
- 이분 탐색의 기본 조건:
- lt는 0부터 시작
- rt는 배열의 마지막 인덱스
- mid = (lt + rt) / 2를 기준으로 탐색 범위 축소
💻 코드 구현 (Java)
package partSort;
import java.util.Arrays;
import java.util.Scanner;
public class Problem8 {
public int solution(int n, int m, int[] arr){
int answer = 0;
Arrays.sort(arr); // 1. 배열 정렬
int lt = 0, rt = n - 1;
while (lt <= rt) {
int mid = (lt + rt) / 2;
if (arr[mid] == m) {
answer = mid + 1; // 인덱스는 1부터 시작
break;
}
if (m > arr[mid]) lt = mid + 1;
else rt = mid - 1;
}
return answer;
}
public static void main(String[] args) {
Problem8 T = new Problem8();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int m = kb.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) arr[i] = kb.nextInt();
System.out.print(T.solution(n, m, arr));
kb.close();
}
}
📖 코드 설명
1️⃣ 배열 정렬
Arrays.sort(arr);
- 이분 탐색은 정렬된 배열에서만 사용할 수 있기 때문에 먼저 정렬
2️⃣ 이분 탐색 로직
int lt = 0, rt = n - 1;
while (lt <= rt) {
int mid = (lt + rt) / 2;
...
}
- mid는 현재 범위의 중간 인덱스
- lt와 rt를 이용해 탐색 범위를 줄여 나감
- arr[mid]와 m을 비교해 범위 조절
⏳ 시간 복잡도 분석
| 정렬 | O(N log N) |
| 이분 탐색 | O(log N) |
| 전체 | O(N log N) |
- 정렬 시간이 가장 크므로 전체 시간복잡도는 O(N log N)
출처: 인프런 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
https://www.inflearn.com/course/자바-알고리즘-문제풀이-코테대비/dashboard
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 강의 | 김태원 - 인프런
김태원 | , 자바(Java) 알고리즘 문제풀이 채점사이트를 통해 기초부터 준비해보세요! 💪 [사진] 이 강의는 [사진] 자바(Java)로 코딩테스트 준비를 하고 계신 분께 추천드려요! 문제는 기초~ 중급
www.inflearn.com
'코딩테스트 > 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비' 카테고리의 다른 글
| 섹션6. Sort - 10. 마구간 정하기(결정알고리즘) (0) | 2025.04.26 |
|---|---|
| 섹션6. Sort - 9. 뮤직비디오(결정알고리즘) (0) | 2025.04.25 |
| 섹션6. Sort - 7. 좌표 정렬 (0) | 2025.04.24 |
| 섹션6. Sort - 6. 장난꾸러기 (0) | 2025.04.13 |
| 섹션6. Sort - 5. 중복 확인 (0) | 2025.04.13 |