문제: https://www.acmicpc.net/problem/11053
관련 : https://www.acmicpc.net/problem/11663
원본 수열의 부분 수열 중에서 증가하는 형태의 수열을 찾는 문제.
- 목적 : 정렬된 배열내 목표값과 동일하거나 큰값 중 최소값/위치 찾기
public static int lowerBound(int[] arr, int target) { int left = 0, right = arr.length; while (left < right) { // ✅ 종료 조건 (left == right) int mid = (left + right) / 2; if (arr[mid] >= target) { // 🔥 target보다 크거나 같다면, 더 작은 mid를 찾아야 함 right = mid; } else { // 🔽 target보다 작으면 left 증가 left = mid + 1; } } return left; // 🎯 target 이상의 첫 번째 위치 반환 }
- 목표 : 정렬된 배열 내 목표값과 동일하거나 작은값 중 최대값/위치 찾기
static int upperBound(int[] arr, int target) { int left = 0, right = arr.length; while (left < right) { int mid = (left + right) / 2; if (arr[mid] > target) { // target 초과인 경우 right = mid; } else { left = mid + 1; // target 이하일 경우 오른쪽 탐색 } } return left; // target 초과 값이 처음 등장하는 위치 반환 }
💡이진탐색(BinarySearch)
- 목적 : 정렬된 배열내 목표값 찾기