# 이진 탐색 - 재귀 함수
def binary_search(array, target, start, end):
if start > end:
return None
mid = (start + end) // 2
if array[mid] == target:
return mid
elif array[mid] > target:
return binary_search(array, target, start, mid - 1)
else:
return binary_search(array, target, mid + 1, end)
# n : 원소의 개수
# target : 찾고자 하는 값
n, target = list(map(int, input().split()))
# 전체 원소 입력
array = list(map(int, input().split()))
# 출력
result = binary_search(array, target, 0, n - 1)
if result == None:
print("원소가 존재하지 않습니다.")
else:
print(result + 1)
# 이진 탐색 - 반복문
def binary_search(array, target, start, end):
while start <= end:
mid = (start + end) // 2
if array[mid] == target:
return mid
elif array[mid] > target:
end = mid - 1
else:
start = mid + 1
return None
# 입력
n, target = list(map(int, input().split()))
array = list(map(int, input().split()))
# 이진 탐색 수행 결과 출력
result = binary_search(array, target, 0, n - 1)
if result == None:
print('원소가 존재하지 않습니다.')
else:
print(result + 1)
#include <bits/stdc++.h>
using namespace std;
// 이진 탐색 소스코드 구현(반복문)
int binarySearch(vector<int>& arr, int target, int start, int end) {
while (start <= end) {
int mid = (start + end) / 2;
// 찾은 경우 중간점 인덱스 반환
if (arr[mid] == target) return mid;
// 중간점의 값보다 찾고자 하는 값이 작은 경우 왼쪽 확인
else if (arr[mid] > target) end = mid - 1;
// 중간점의 값보다 찾고자 하는 값이 큰 경우 오른쪽 확인
else start = mid + 1;
}
return -1;
}
int n, target;
vector<int> arr;
int main(void) {
// n(원소의 개수)와 target(찾고자 하는 값)을 입력 받기
cin >> n >> target;
// 전체 원소 입력 받기
for (int i = 0; i < n; i++) {
int x;
cin >> x;
arr.push_back(x);
}
// 이진 탐색 수행 결과 출력
int result = binarySearch(arr, target, 0, n - 1);
if (result == -1) {
cout << "원소가 존재하지 않습니다." << '\n';
}
else {
cout << result + 1 << '\n';
}
}
bisect_left(a, x)
: 배열 a의 정렬된 순서를 유지하면서 배열 a에 x를 삽입할 가장 왼쪽 인덱스를 반환bisect_right(a, x)
: 배열 a의 정렬된 순서를 유지하면서 배열 a에 x를 삽입할 가장 오른쪽 인덱스를 반환# 값이 특정 범위에 속하는 데이터 개수 구하기
from bisect import bisect_left, bisect_right
# 값이 [left_value, right_value]인 데이터의 개수를 반환하는 함수
def count_by_range(a, left_value, right_value):
right_index = bisect_right(a, right_value)
left_index = bisect_left(a, left_value)
return right_index - left_index
# 배열 선언
a = [1, 2, 3, 3, 3, 3, 4, 4, 8, 9]
# 값이 4인 데이터 개수
print(count_by_range(a, 4, 4))
# 값이 [-1, 3] 범위에 있는 데이터 개수
print(count_by_range(a, -1, 3))
# 떡볶이 떡 만들기 : 답안 예시
# 입력
n, m = map(int, input().split())
array = list(map(int, input().split()))
# 절단기 길이의 시작점과 끝점 설정
start = 0
end = max(array)
# 이진탐색 수행
result = 0
while(start <= end):
total = 0
mid = (start + end) // 2
for x in array:
# 잘랐을 때 떡의 양 계산
if x > mid:
total += x - mid
# 떡의 양이 모자란경우 -> 절단기의 크기 줄이기(왼쪽 탐색)
if total < m:
end = mid - 1
# 떡의 양이 같거나 많은 경우 -> 오른쪽 부분 탐색
else:
result = mid
start = mid + 1
print(result)
from bisect import bisect_left, bisect_right
# 값이 [left_value, right_value]인 데이터의 개수를 반환하는 함수
def count_by_range(a, left_value, right_value):
right_index = bisect_right(a, right_value)
left_index = bisect_left(a, left_value)
return right_index - left_index
n, x = map(int, input().split())
array = list(map(int, input().split()))
count = count_by_range(array, x, x)
if count == 0:
print(-1)
else:
print(count)