목록✏️ 2022. TIL (107)
Daehyunii's Dev-blog
오늘은 연결 리스트 자료 구조에 대해서 공부했다. 연결 리스트는 다시 단일 연결 리스트와 이중 연결 리스트로 나뉘게 된다. 단일 연결 리스트는 노드들을 단방향으로 연결하는 자료 구조이고, 이중 연결 리스트는 노드들을 양방향으로 연결하는 자료 구조이다. 배열과 비슷한 것처럼 보이지만 배열은 인덱스를 가지게 되어 데이터를 맨 뒤에 추가하거나 삭제하는 경우를 제외하고는 맨 앞에 데이터를 추가하거나 중간에 데이터를 추가하는 경우에는 인덱스가 다시 설정되어야 한다. 하지만 연결 리스트의 경우에는 인덱스 번호를 가지고 있지 않기 때문에 데이터를 중간에 추가하거나 삭제하더라도 단순히 데이터끼리의 연결만 다시 설정해 주면 되기 때문에 배열에 비해 효율성이 좋다. 그러나 해당 데이터에 접근을 하는 경우에는 인덱스를 가지..
오늘은 퀵 정렬에 대해서 공부했다. 앞서 배운 합병 정렬에 비해서 코드를 이해하는게 쉽지 않았다. 개념 자체도 조금은 생소하게 느껴졌다. 피벗을 정해서 피벗의 왼편에는 작은 숫자들로 또 오른편에는 큰 숫자들로 정렬하여 피벗 숫자만은 정렬이 되고 피벗 숫자를 중심으로 왼편과 오른편에 새로운 피벗을 정하고 또 큰 수는 오른편에 작은 수는 왼편에 정렬하는 방식으로 계속해서 재귀함수를 사용하여 반복하서 정렬된 배열을 반환하는게 퀵 정렬이었다. 가장 헷갈리게 만들었던 부분은 당연히 재귀를 머릿속으로 그리면서 따라가는게 어려웠다. 아니 따라가지 못했다. 그래서 종이에 하나 하나 대입해가면서 코드를 읽어 나갔다. 또한 스스로 느끼기에 가독성이 그렇게 좋아보이지도 않았다. 효율적인 측면을 따졌을때 정렬 알고리즘 애니메..
오늘은 정렬 알고리즘을 이어서 공부했다. 삽입 정렬과 한 단계 효율이 올라가는 합병 정렬에 대해서 공부했다. 우선 삽입 정렬의 경우에는 버블 정렬과 선택 정렬과 마찬가지로 효율이 좋은 쪽에 속하는 정렬 알고리즘은 아니었다. 일반적으로 O(n^2)시간 복잡도를 갖는 정렬 방식이다. 하지만 정렬 알고리즘 에니메이션을 통해 보았을때 거의 정렬이 되어 있는 배열을 정렬하는 것은 다른 알고리즘들에 비해 굉장히 빠르다는 것을 알 수 있었다. 즉 삽입 정렬의 경우에는 거의 정렬이 되어 있는 배열을 정렬해야 하는 상황에서 사용하기에 아주 알맞은 정렬 알고리즘이라는 것이다. https://www.toptal.com/developers/sorting-algorithms Sorting Algorithms Animations..
오늘은 버블 정렬과 선택 정렬에 대해서 공부했다. 알고리즘에 대해서 명확하게 개념 정의가 이뤄지지 않았었는데, 오늘을 기점으로 알고리즘이 무엇인지 조금씩 스스로 개념 정의가 된 것 같다. 우선 기존에 공부했던 내용들은 자바스크립트의 기본 개념에 대해서 공부한 것이고, 그 과정에서 배웠던 메서드들을 활용해서만 코드를 작성한다는 생각에 사로잡혀서 그랬던것 같다. 오늘 공부를 통해 배열을 정렬하는 방식에는 정말 많은 방법이 있다는 것을 알 수 있었다. 그리고 각각의 정렬하는 방법마다 장단점이 많이 있다. 버블 정렬과 선택 정렬의 경우에는 아래 링크를 통해서 정렬 알고리즘 애니메이션을 보았을때, 다른 알고리즘들에 비해 속도가 굉장히 느리다는 것을 시각적으로 확인할 수 있었다. 하지만 이를 공부하는 이유는 비효율..
오늘은 재귀함수를 통한 문제해결 방법과 검색 알고리즘에 대해서 공부했다. 재귀 함수는 파이썬, 모던 자바스크립트에서 여러번 보았고, 강의를 통해서 다시 한번 설명을 들은 뒤로는 어떻게 재귀함수가 돌아가는지 이해를 하고 있다. 하지만, 어렵긴 어렵다.. 특히 검색 알고리즘을 공부하면서 오늘은 어렵다는 생각이 많이 들었다. 한 번은 꼭 넘어야 할 산이라고 생각해서 열심히 천천히 따라가려고 노력하고 있다. 선형 검색의 경우에는 자바스크립트 메서드를 이용하거나, 코드 작성이 익숙한 반복문을 통해서 검색하기 때문에 괜찮았지만, 이진 검색 알고리즘은 처음에 많은 혼란을 불러 일으켰다. 강의를 듣고 예시 문제를 듣고 스스로 코드를 작성해 보려고 최대한 노력했지만, 스스로 코드를 작성하지는 못했다. 또 코드에 관한 해..
오늘은 문제 해결 접근법과 대표적인 문제 해결 패턴에 대해서 공부했다. 우선 오늘 공부한 문제 해결 접근법은 알고리즘을 공부할 때 가장 기본이 되는 내용인것 같다. 문제를 이해하고 구체적인 예시들을 생각해보고 문제를 세분화해서 큰 그림을 만들고 그 다음 문제를 해결하고 또 해결하지 못한 부분은 단순화하고 나머지 부분을 해결하는 일련의 과정들은 앞으로 문제를 해결하는데 있어서 굉장히 중요한 전략이 될 것 같다. 모든 사람이 문제를 보고 직관적으로 가장 최선의 방법이 떠오른다면 좋겠지만, 사람이기에 그것은 불가능에 가깝다. 그렇기 때문에 문제에 접근하기 위해서는 문제를 자세하게 살펴보고 정확하게 이해하는게 중요한 것 같다. 해당 강의를 듣기전까지만 해도 간단한 문제를 구현함에 있어서 어떻게 접근해야 할 지 ..
모던 자바스크립트 기본 개념과 동작 원리를 1회독하고 알고리즘 강의를 듣기 시작했다. 정말 다행스럽게도 개발자인 지인의 추천을 받아 좋은 강의를 찾을 수 있었고, 오늘 처음으로 듣기 시작했다. 오늘 공부한 내용은 빅오 표기법이다. 빅오 표기법은 결국 코드와 코드를 비교할때 비교할 수 있는 기준이 되는 척도가 되는것이다. 모든 코드는 장단점을 가지고 있고 개발자는 각각의 상황에 맞는 알맞은 코드를 구현한다. 그런데 비교를 하고자 한다면 기준이 필요할 것이고, 그 기준을 만들어 놓은게 바로 빅오 표기법이다. 빅오 표기법은 크게 시간 복잡도와 공간 복잡도로 나눌 수 있겠다. 공간 복잡도는 전달하는 값이 크면 클수록 얼마나 많은 메모리 공간이 필요한지를 추세로, 시간 복잡도는 전달하는 값이 크면 클수록 얼마나 ..
오늘은 모듈을 마지막으로 자바스크립트 모던 딥 다이브라는 책을 1회독 마쳤다. 우선 모듈에 대해서 생각해보자면, 모둘은 하나의 도구인것 같다. 자바스크립트는 ESM이 등장하기 이전에는 도구를 만들 수 있는 방법을 제공하지 못했지만, 그 이후 ESM의 등장으로 도구를 만들어 독립적인 파일로 만들고 독립적인 스코프를 갖게해서 도구를 함부로 변경할 수 없게 해서 유지하고, 도구의 내용들중 외부에서 필요한 부분만 사용할 수 있게 해주는 것이다. 이는 굉장히 유용할 것 같다는 생각이 들었다. 계속해서 반복적으로 사용되는 것들은 미리 하나의 모듈로 만들어 놓고 필요할때 마다 사용하면 되는 일이니 시간과 비용을 모두 단축시킬 수 있는 좋은 기능이라는 생각이 들었다. 또한 키워드들도 export, import가 딱 알..