Toy Problem 10 #

이건우·2021년 3월 26일

ToyProblem 알고리즘.

목록 보기
2/3
const binarySearch = function (arr, target) {
  // return arr.indexOf(target)
  // 이진 탐색으로 왼쪽과 오른쪽으로 나눈다. 
    let left = 0,
    right = arr.length - 1;

// 오른쪽이 왼쪽보다 크거나 같을때까지 반복한다.
  while (left <= right) {
    // 중간 = parseInt ((right+left) /2)
    let middle = parseInt((right + left) / 2);
    // 배열[중간] = 타겟이 같다면 ? 중간인덱스를 리턴함.
    if (arr[middle] === target) {
      return middle;
    }
    // 타겟이 배열[중간]보다 크다면 ?
    if (target < arr[middle]) {
      // 오른쪽은 중간 -1
      right = middle - 1;
    } else {
      // 왼쪽에 중간 -1
      left = middle + 1;
    }
  }
  // 없으면 -1 
  return -1;
};

접근 패턴..

1. 문제 흐름 파악 -> 문제에서 나에게 어떤 상황이 주어졌는가?
                  * 무슨 문제일지 파악할때까지, 레퍼런스 보지않기. 간단히 어떤 전략으로 해결할지 생각
                // arr.indexOf(target) 
                이것으로그냥 다 해결될거라생각했다. 하지만 이것이 무슨문제인가!? 알고리즘이다.... 
                절반씩 줄여가며 찾아가기.. 
      

2. 레퍼런스보기 -> 1) 크게 코드를 쭈욱 읽어보고 큰 줄기를 파악 (어떤 로직과 설계를 썼는가.. )
                  2) RunJs를 통해 실시간으로 console.log를 찍고 컴퓨터와 하나하나 이야기해보기
                  3) 파악
                  4) 반복 & 복습(자기전에 간단히) 1~3번 사항을 다시 해봄. (하루에 처음접근, 주어진 시간동안 재귀..)

                  5) 아침에 일찍일어나서 다음 알고리즘 문제 풀기전에 같은 문제를 또 접근해봄. 
                  6) 2일 혹은 3일 사이클로 문제는 누적하여 , 하루에 3문제
                      (버블sort 알고리즘, queue 처럼 먼저 배운것은 빼고 나중에.. )
                  7) 만약에 되면.. 주말에 토요일 3문제, 일요일 3문제 총 5문제에서 6문제 일주일 결산으로 반복.

profile
내가 느낌만알고 한줄도 설명할줄 모른다면 '모르는 것'이다.

0개의 댓글