Skip to content

Commit

Permalink
#7 22.05.14 > 이진탐색
Browse files Browse the repository at this point in the history
  • Loading branch information
beurmuz committed May 14, 2022
1 parent 09cc2c6 commit b322845
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 17 deletions.
38 changes: 23 additions & 15 deletions src/inf/sort,greedy/10.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,32 @@
function solution(target, arr){
let answer = 0;
arr.sort((a,b) => a-b);
console.log(...arr);

let leftPivot = 0;
let rightPivot = arr.length-1;
while(leftPivot < rightPivot) {
let middlePivot = parseInt(leftPivot+rightPivot)/2;
if(arr[middlePivot] === target) {
answer = middlePivot+1;
break;
} else if(arr[middlePivot] > target) {
rightPivot = middlePivot-1;

let left = 0;
let right = arr.length-1;
while(left <= right) { // 조건식이 참인 동안에만
let pivot = parseInt((left + right)/2);
if(arr[pivot] === target) {
answer = pivot + 1;
break; // 반복문 빠져나가기
} else if(arr[pivot] > target) {
right = pivot - 1;
} else {
leftPivot = middlePivot+1;
left = pivot + 1;
}
return answer;
}

return answer;
}

let arr=[23, 87, 65, 12, 57, 32, 99, 81];
console.log(solution(32, arr));
console.log(solution(32, arr));

/*
1. 우선 arr 정렬하기
2. 배열의 왼쪽 끝(left)과 오른쪽 끝(right) 값을 저장할 변수 선언
3. left가 right보다 작거나 같은 경우에만 반복문 반복
4. pivot은 left + right를 2로 나눈 것으로
- 만약 arr[pivot]이 target과 같은 경우 answer에 현재 pivot + 1을 해줌 (+1을 하는 이유는 문제에서 몇 번째냐고 물었기 때문)
- 만약 arr[pivot]이 target보다 크면 right에 pivot -1을 저장해서 탐색 구간을 줄여줌 (중간값 -1)
- 만약 arr[pivot]이 target보다 작으면 left에 pivot + 1을 저장해서 탐색 구간을 줄임 (중간값 +1)
*/
8 changes: 6 additions & 2 deletions src/inf/sort,greedy/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@
# 그리디
> [JavaScript greedy](../../../theory/greedy.md)
# 이분검색 (이진탐색)
> [JavaScript Binary Search](../../../theory/binarySearch.md)

# List
|번호|정답여부|재응시|
|:---:|:---:|:---:|
Expand All @@ -15,7 +19,7 @@
|6|O|O|
|7||O|
|8||O|
|9|X|O|
|10|X|예정|
|9||O|
|10||한번 더 풀기|
|11|X|예정|
|12|X|예정|
7 changes: 7 additions & 0 deletions theory/binarySearch.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# 이진탐색, 이분탐색 (Binary Search)
- 이진 탐색은 데이터가 정렬되어 있는 배열에서 특정한 값을 찾아내는 알고리즘
- 배열의 중간 값을 이용해 찾고자하는 값 x와 비교함
- x가 중간 값보다 작으면 중간 값을 기준으로 좌측의 데이터를 대상으로,
- x가 중간 값보다 크면 중간 값을 기준으로 우측의 배열을 대상으로 다시 탐색함
- 해당 값을 찾을 때까지 이 과정을 반복

0 comments on commit b322845

Please sign in to comment.