【스터디노트】/▷TIL
99클럽 코테 스터디 19일차 TIL + 오늘의 학습 키워드 이진탐색
아딜렛
2025. 4. 24. 09:49
- 오늘의 학습 키워드 이분 탐색
- 공부한 내용 본인의 언어로 정리하기
이분탐색
입력받은 배열 A를 정렬-> 배열 B
각 질문 값에 대해서 lower bound 찾기
lower bound함수는 이분탐색을 사용해서 정렬된 배열에서 target 값 이상의 첫번째 위치를
찾음
모든 결과를 수집 반환
수도 코드
function solveSortMasterProblem(A, queries):
1. 배열 A를 오름차순으로 정렬한다.
2. 각 질문 D에 대해:
a. D가 배열 A에서 처음 등장하는 위치를 이분 탐색으로 찾는다.
b. 찾은 위치를 출력한다. 찾지 못했다면 -1을 출력한다.
function findFirstOccurrence(arr, target):
1. 탐색 범위를 배열의 처음부터 끝까지로 설정한다.
2. 결과값을 -1로 초기화한다.
3. 탐색 범위가 유효한 동안:
a. 중간 위치를 계산한다.
b. 중간값이 target과 정확히 일치하면:
- 현재 위치를 결과에 저장한다.
- 더 앞에 같은 값이 있는지 확인하기 위해 왼쪽 부분만 계속 탐색한다.
c. 중간값이 target보다 크면 왼쪽 부분을 탐색한다.
d. 중간값이 target보다 작으면 오른쪽 부분을 탐색한다.
4. 저장된 결과값을 반환한다.
- 오늘의 회고
- 어떤 문제가 있었고, 나는 어떤 시도를 했는지
문제 틀렸다.
lowerBound 함수에서 등호로 비교했는데 D에서 B가 처음으로 등장한 위치를 제대로 못찾았다.
- 어떻게 해결했는지
target 값을 찾았을때
target 보다 arr[mid] 값이 더 클때 , 작을때 로 세분화하여 나눴다.
target 값이랑 mid가 같으면 현재 위치를 저장하고 right에서 동일한 값이 있는지를 찾고
만약 mid가 더 크면 right를 mid-1로 만들었다.
- 무엇을 새롭게 알았는지
lower bound: 정렬된 배열에서 특정 값이상이 처음 나타나는 위치를 찾는 알고리즘
이분 탐색의 시간 복잡도가 O(logN) 인 이유:
각 단계마다 탐색시간이 1/2 으로 줄어들기 때문이다.
이분 탐색에서 중간값 계산 공식 mid =left +(right-left)/2
- 내일 학습할 것은 무엇인지