일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 알고리즘
- 크래프톤 정글 4기
- anonymous page
- 핀토스
- User Stack
- 파이썬
- BFS
- 오블완
- 연결리스트
- 네트워크
- project3
- 백준
- 이벤트 함수 실행 순서
- 크래프톤정글
- c#
- 추상클래스와인터페이스
- 크래프톤정글4기
- C
- 크래프톤 정글
- 유니티
- 다익스트라
- 4기
- 전쟁-전투
- Unity
- kraftonjungle
- KRAFTON JUNGLE
- TiL
- 티스토리챌린지
- 알고리즘수업-너비우선탐색2
- pintos
Archives
- Today
- Total
말감로그
24.08.14 알고리즘 - 이진 탐색(Binary search) 본문
728x90
이진 탐색(Binary search)
이진 탐색은 오름차순으로 정렬된 배열을 반복적으로 반으로 나누어 target이 선택될 때까지 탐색하는 알고리즘이다.
시간 복잡도 : O(logN)
1. 배열을 오름차순으로 정렬한다.
2. 배열의 중간값(mid)이 찾고자 하는 값(target)인지 비교한다.
3. mid 값이 target과 다르다면 대소관계를 비교하여 탐색 범위를 좁히고, target과 mid 값이 같을 때까지 아래 조건에 따라 2번과 3번을 반복한다.
ⓐ target이 mid 값보다 작으면 end를 mid 왼쪽 값으로 바꿔준다. (절반의 왼쪽 탐색)
ⓑ target이 mid 값보다 크면 start를 mid 오른쪽 값으로 바꿔준다. (절반의 오른쪽 탐색)
def binary_search(target, array):
array.sort()
start = 0 # 맨 처음 위치
end = len(array) - 1 # 맨 마지막 위치
while start <= end:
mid = (start + end ) // 2 # 중간 값
if array[mid] == target:
return mid # target 위치 반환
elif array[mid] > target: # target이 작으면 왼쪽 탐색
mid = end - 1
else: # target이 크면 오른쪽 탐색
start = mid + 1
return
백준 1920_ 수찾기
1. 이진탐색
N = int(input())
A = list(map(int,input().split()))
M = int(input())
B = list(map(int,input().split()))
A.sort()
def binary_search(target, data):
start = 0
end = len(data) - 1
while start <= end:
mid = (start + end) // 2
if data[mid] == target:
return True
elif data[mid] < target:
start = mid + 1
else:
end = mid - 1
return False
for b in B:
if binary_search(b, A):
print(1)
else:
print(0)
2. set으로 탐색
N = int(input())
A = set(map(int,input().split()))
M = int(input())
B = map(int,input().split())
for b in B:
print(1) if b in A else print(0)
백준 10815_숫자카드
N = int(input())
array1 = list(map(int,input().split()))
M = int(input())
array2 = list(map(int,input().split()))
array1.sort()
def binary_search(target, data):
start = 0
end = len(data) - 1
while start <= end:
mid = (start + end) //2
if target == data[mid]:
return True
elif target > data[mid]:
start = mid + 1
else:
end = mid - 1
return False
for i in array2:
print(1, end=" ") if binary_search(i,array1) else print(0, end=" ")
728x90
'TIL' 카테고리의 다른 글
24.08.19 Unity_C# - Time.deltaTime, 유니티로 타이머 구현 알고리즘 설명 (0) | 2024.08.19 |
---|---|
24.08.19 Unity_C# - 생명주기(Awake vs Start, Update 등 ) (0) | 2024.08.19 |
24.08.13 운영체제 - 가상 메모리, 페이지 교체 정책, 메모리 관리 (1) | 2024.08.13 |
24.08.12 운영체제 - 프로세스 동기화(경쟁 상태, 임계구역, 뮤텍스, 세마포어, 데드락) (0) | 2024.08.12 |
24.08.06 운영체제 - CPU의 작업 처리방식, CPU 스케줄링 (1) | 2024.08.06 |