Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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
- 코딩테스트준비
- til
- flutter getx
- 코딩테스트 준비
- 오블완
- 99클럽
- vue
- 개발자취업
- 티스토리챌린지
- Laravel
- 코딩테스트
- 플러터
- C++
- 파이썬
- Python
- DP
- 파이썬 코테
- 알고리즘
- c++ 코테
- 라라벨
- 항해99
- 코테 파이썬
- 개발자 취업
- ML
- 안드로이드
- 백준
- react
- 뷰
- Flutter
- 코테
Archives
- Today
- Total
잡다로그
[99클럽 코테 스터디] 11일차 TIL - 이분탐색, Search Insert Position 본문
[11일차] 이분탐색
문제: https://leetcode.com/problems/search-insert-position/description/

* 대충 번역: 중복되지 않는 정수와 target 값이 포함된 정렬된 배열이 주어질 때, target의 인덱스를 반환하라. target이 없다면, 들어가야 하는 순서의 인덱스를 반환하라. O(logn)의 시간복잡도로, 0초대에 해결되는 알고리즘이어야 한다.
Solution
빠른 탐색을 위해서는 이분탐색 알고리즘을 활용할 수 있다.
class Solution(object):
def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
start = 0
end = len(nums) - 1
while start <= end:
mid = (start + end) // 2
if nums[mid] == target:
return mid
elif nums[mid] > target:
end = mid - 1
else:
start = mid + 1
return start
while 반복문을 빠져나왔다면, end < start 가 되었다는 뜻이다. 즉 반복문을 빠져나오기 직전, nums[mid] < target < nums[start] 인 상황이 된 것이다. 그러므로 target은 start 위치에 들어가야 한다.
나다어
- 이분탐색에서, mid값이 곧 검사 위치이므로 인덱스를 end = mid - 1, start = mid + 1 로 업데이트해 주어야 한다. 이미 검사한 mid는 제외하는 것이다.
- 파이썬에서 / 는 나눗셈 결과, // 는 몫의 결과이다.
'Algorithm' 카테고리의 다른 글
| [99클럽 코테 스터디] 13일차 TIL - 그래프, Find Center of Star Graph (0) | 2024.06.13 |
|---|---|
| [99클럽 코테 스터디] 12일차 TIL - 이분탐색, Count Negative Numbers in a Sorted Matrix (0) | 2024.06.12 |
| [99클럽 코테 스터디] 10일차 TIL - 동적계획법, Divisor Game (0) | 2024.06.09 |
| [99클럽 코테 스터디] 9일차 TIL - 동적계획법, Fibonacci Number (0) | 2024.06.08 |
| [99클럽 코테 스터디] 8일차 TIL - 동적계획법, Pascal's Triangle (0) | 2024.06.08 |
Comments