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 |
Tags
- leetcode977
- leetcode189
- 다리놓기
- react-firebaseui
- 리액트
- 프로토타입
- 파이썬
- 커스텀알락
- 파이어베이스로그인
- firebaseui
- Python
- 커스텀알림
- JS
- css
- mac
- 구조분해할당
- 자바스크립트
- nvmrc
- react-native
- yarn-berry
- 기초
- TCPvsUDP
- 백준
- Spread
- Next.js
- Rest
- iP
- youtube iframe
- React
- nvm
Archives
- Today
- Total
JadeCode
[Leetcode] Algorithm Day1 Binary Search 본문
Binary Search
Binary Search(이진 탐색)
이진 탐색은 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘이다.
최소값는 리스트의 첫 번째 값이고, 최대값은 리스트의 마지막으로 설정한다.
중간의 값을 중앙값으로 설정하고, 중앙값 < target 이면 중앙값은 찾고자 하는 값의 새로운 최소값이 되고, 중앙값 > target이면 중앙값이 새로운 최대값이 된다. 정렬된 리스트에만 사용할 수 있다는 단점이 있지만, 검색이 반복될 때마다 목표값을 찾을 확률은 두배가 되므로 속도의 측면에서는 장점이다.
704. Binary Search
기본적인 binary search이다.
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var search = function (nums, target) {
let answer = -1;
let start = 0;
let last = nums.length - 1;
while (start <= last) {
let mid = parseInt((start + last) / 2);
if (nums[mid] === target) {
answer = mid;
break;
} else if (nums[mid] > target) {
last = mid - 1;
} else {
start = mid + 1;
}
}
return answer;
};
278. First Bad Version
이미 isBadVersion()이라는 함수가 리트코드 내에서 정의되어 있고 그것을 사용하는 것이다.
mid가 true이면 그 값을 answer로 일단 넣어두고 그보다 작은 isBadVersion(mid) === true인 값이 있으면 answer을 재할당한다.
/**
* Definition for isBadVersion()
*
* @param {integer} version number
* @return {boolean} whether the version is bad
* isBadVersion = function(version) {
* ...
* };
*/
/**
* @param {function} isBadVersion()
* @return {function}
*/
var solution = function(isBadVersion) {
/**
* @param {integer} n Total versions
* @return {integer} The first bad version
*/
return function(n) {
let answer = 0
let first = 1
let last = n
while(first<=last){
let mid = parseInt((first+last)/2);
if(isBadVersion(mid)){
last = mid-1
answer = mid
}else{
first = mid+1
}
}
return answer
};
};
35. Search Insert Position
answer에 mid보다 하나 큰 index값을 저장한다
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var searchInsert = function (nums, target) {
let answer = 0;
let first = 0;
let last = nums.length - 1;
while (first <= last) {
let mid = parseInt((first + last) / 2);
if (nums[mid] < target) {
answer = mid + 1;
first = mid + 1;
} else {
last = mid - 1;
}
}
return answer;
};
참고
'개발 > 알고리즘' 카테고리의 다른 글
[프로그래머스] Level2 > 카펫.js (0) | 2023.02.28 |
---|---|
[자바스크립트] 2진수, 8진수, 16진수 변환 (1) | 2023.02.09 |
[백준] python 10815 숫자카드 (0) | 2022.04.27 |
[백준] python 2630 색종이 만들기 (0) | 2022.03.08 |
[백준] python 1059 좋은 구간 (0) | 2022.02.27 |
Comments