
class Node{ constructor(val){ this.val = val; this.next = null; this.prev = null; } } class DoublyLinkedList { constructor(){ this.head = null; this.tail = null; this.length = 0; } push(val){ var newNode = new Node(val); if(this.length === 0){ this.head = newNode; this.tail = newNode; } else { this.tail.next = newNode; newNode.prev = this.tail; this.tail = newNode; } this.length++; return this; ..
연결 리스트는 인덱스가 없이 단지 다음 노드들을 가리키고 있는 수많은 노드들이다. 배열과는 다르다. 엘리베이터가 없는 고층 빌딩과 같다. 단방향으로 연결 되어있기 때문에 다음 노드로 데이터를 읽는 게 가능하고 역방향은 안된다. 삽입과 제거가 쉽다. head와 tail을 지정해줘야한다. 1. push, pop, shift, unshift, insert, remove, reverse, get, set class Node{ constructor(val){ this.val = val; this.next = null; } } class SinglyLinkedList{ constructor(){ this.head = null; this.tail = null; this.length = 0; } push(val){ v..

1. 합병 정렬(Merge Sort) 분할, 정렬, 합병 3가지가 모두 일어난다. 배열을 더 작은 배열로 나누는 방식. 0개 또는 1개로 구성된 배열이 될 때까지 나눈 다음 다시 합치면서 정렬을 한다. 합병 정렬은 재귀를 쓴다. slice를 재귀로 사용해 0,1개의 요소가 남을 때까지 작게 쪼갠다. 이후 합병 함수를 사용해 다시 합친다. 시간 복잡도는 O(nlogn), 공간 복잡도는 O(n) function merge(arr1, arr2){ //두 개의 배열을 정렬할 때, 합병 정렬의 한 부분 let results = []; let i = 0; let j = 0; while(i arr..
정렬 알고리즘은 재배열하는 것. 아래 3가지의 정렬을 데이터의 크기가 작을 때 유용하다. 1. 버블 정렬 그다지 효율적이지 않고 잘 쓰이지 않는다. 해당 인덱스와 다음 인덱스의 크기를 비교하면서 정렬을 한다. 가장 큰 값이나 가장 작은 값을 하나씩 맞춰가는 것. 이를 반복하면서 정렬을 한다. 하나씩 값이 고정되기 때문에 정렬해야 하는 항목의 수가 감소한다. 시간 복잡도는 O(n) ~ O(n^2) function bubbleSort(arr){ var noSwaps; // 최적화를 위해 변수 선언 for(var i = arr.length; i > 0; i--){ //가장 우측의 값을 정하니 인덱스가 하나씩 줄어듦 noSwaps = true; for(var j = 0; j < i - 1; j++){ if(ar..
1. 선형 탐색 처음부터 끝까지 혹은 끝부분부터 처음까지 하나씩 돌면서 검색하는 것 (indexOf, includes, find, findIndex 등등...) 시간 복잡도는 O(n)이다. for루프 한 개. 2. 이진 탐색 이진 탐색의 경우 확인을 할 때마다 남은 항목의 절반을 없앨 수 있다. 정렬이 되어 있어야 한다. (ex. 가장 작은 수 ~ 가장 큰 수) //가장 중요!! 시간 복잡도는 O(1)~O(logn)이다. 중간 지점 기준으로 찾는다. 중간 지점보다 크다면 중간 오른쪽. 거기서 또 새로운 중간 지점을 찾으면서 반복한다. function binarySearch(arr, val) { let start = 0; let end = arr.length - 1; let middle = Math.flo..

geolocation.getCurrentPosition - 현재 자신의 위치를 가져온다. - argument가 2개 필요하다.(한 개는 정상 작동할 때, 다른 한 개는 오류가 났을 때) Navigator 객체 navigator 객체는 브라우저 공급자 및 버전 정보 등을 포함한 브라우저에 대한 다양한 정보를 저장하는 객체입니다. 이 객체의 이름은 넷스케이프(Netscape)의 초기 웹 브라우저였던 내비게이터(Navigator)에서 유래되었습니다. position.coords.(latitude,longitude) - 위도 경도 좌표. 최종본. fetch를 이용해 화면에 나타낸다. fetch() 함수는 첫번째 인자로 URL, 두번째 인자로 옵션 객체를 받고, Promise 타입의 객체를 반환합니다. 반환된 객..

To Do List const A = document.createElement("B"); B요소를 만들고 A에 저장함. A.appendChild(C); C(const 된거)를 A(얘도)에 저장 A.innerText = B B를 A에 html에 문자로만 집어넣음?.. A.target.parentElement; A속에 있는 놈의 타겟(button), 그리고 그 속의 부모 요소(li)? arrow function : function의 화살표 형태 filter() 메서드는 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환한다. return 값으로 인해 1000이하의 숫자만 반환하는 모습. 하지만 const arr의 값은 변환하지 않는다. 반환하는 값만 달라질 뿐이다.
https://codesandbox.io/s/empty-blueprint-forked-hmv4t?file=/src/index.js Empty Blueprint (forked) - CodeSandbox Empty Blueprint (forked) codesandbox.io 0부터 내가 설정한 최대값을 이용하여 0~max 값중에 랜덤으로 돌리고, 또 내가 숫자를 하나 지정하여 랜덤으로 돌린 숫자 중에 내가 지정한 숫자와 일치하면 You win! 일치하지 않으면 You lost! 값을 내는 과제였다. 처음 빡센 문제를 접하니 속이 메슥거렸지만 구글링으로 값을 하나하나 찾아가며 완성했다.