오늘 한 일

알고리즘

이진탐색을 학습하였다. 학습하는 책에 예제가 파이썬으로 되어 있어서 파이썬을 통해 학습하려고 했지만 익숙하지 않은 이유도 있고 자신 있는 언어 하나쯤은 만들어놔야 할 것 같아 최근 공부하기도 하면서 가장 많이 사용하고 있는 자바스크립트를 사용하여 학습할 계획이다.

 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
function binary_search(list, item) {
    //0번 인덱스
    let low = 0;
    //마지막 인덱스
    let high = list.length - 1;
    
    while (low <= high) {
      //이진 탐색 (절반 구하기)
      let mid = Math.floor((low + high) / 2);
      //절반 기준 data 값
      let guess = list[mid];

      if (guess === item) {
        return mid;
      }
      //기준점보다 들어온 값의 데이터가 작으면 그 기준점 - 1을 high 인덱스로 변경
      if (guess > item) {
        high = mid - 1;
      } else {
      //기준점보다 들어온 값의 데이터가 크면 그 기준점 + 1을 high 인덱스로 변경 
        low = mid + 1;
      }
    }
    return null;
  }

단순 탐색에 비하면 훨씬 효율적인 이진탐색을 배웠다. 100개는 7회, 40억개의 데이터를 최대 32번의 횟수를 통해 원하는 데이터를 찾을 수 있다는 사실이 놀라웠다. 로그시간과 빅오표기에 대한 내용도 나오는데 솔직히 아직 이해가 되지는 않는다. 꾸준히 학습하지 않아서 그런지 이해가 되었다가도 금방 까먹는거 같다. 앞으로는 꾸준히 학습해서 내 것으로 만들고 싶다.

느낀점

최근들어 아이폰 앱을 한번 만들어볼까 생각하고 강좌를 조금 찾아봤다. 마음에 쏙 드는 강의가 없어 고민하던 찰나 udemy에서 볼만한 강좌를 찾았다. 하지만 영어..ㅠ라 수강할지 고민중이다. 예전부터 한번쯤은 꼭 영어강의를 나도 들어보고 싶다라는 생각만 했을뿐 실천하지 못했는데 이번 기회를 삼아 도전해볼까 진지하게 고민중이다. 최근 시작한 알고리즘과 함께 iso쪽을 조금씩 학습 하면서 개발에 조금 더 흥미를 느낄 수 있었으면 좋겠다.