일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
26 | 27 | 28 | 29 | 30 | 31 |
- 스택
- alexnet
- 코딩테스트
- 브라우저
- 자바스크립트
- 컨테이너
- Machine Learning
- pytorch
- 큐
- 프로세스
- 이진탐색
- 자료구조
- 프론트엔드
- GraphQL
- RxJS
- 배열
- 알고리즘
- 연결리스트
- 연결 리스트
- APOLLO
- 포인터
- 웹팩
- cors
- C
- RT scheduling
- 해시테이블
- 프로그래머스
- vue3
- 타입스크립트
- 릿코드
- Today
- Total
목록자바스크립트 (39)
프린세스 다이어리
1. 접근 방법 (1) 힌트에 이전 피보나치 문제처럼 풀라고 해서 재귀로 풀었더니 시간 초과가 났다(???). 그래서 DP로 풀었다. (2) 베이스 케이스를 써 준다. stairs[1] = 1; stairs[2] = 2; (3) for문을 돌면서 점화식을 이용해 연산해준다. for (let i = 3; i
문제 링크 1. 접근 방법 (1) 이전에 계산해 둔 결과를 활용하여 지금 연산을 하는 메모이제이션 방식이다. (2) cache 객체를 만들어 놓고, 함수를 재귀적으로 실행할 때 cache에 해당 값이 이미 존재하면 그 값을 리턴한다. if (Object.keys(cache).includes(n)) { return cache.n; } (3) cache에 해당 값이 없으면, 값을 리턴한다. 피보나치 배열에서는 인덱스 0, 1은 각각 값이 0과 1이고, 그 다음 인덱스부터는 이전 인덱스에 해당하는 값과 이이전 인덱스에 해당하는 값을 더한 값이 할당된다. if (n < 2) { result = n; } else { result = recur(n - 2) + recur(n - 1); } (4) cache에 인덱스..
1. 값 값은 표현식(expression)이 평가(evaluate)되어 생성된 결과를 말한다. 10 + 20; //30 - 위의 식은 평가되어 숫자 값 30을 생성한다. 평가란, 식을 해석해서 값을 생성하거나 참조하는 것을 뜻한다. var sum = 10 + 20; - 변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체, 또는 메모리 공간을 식별하기 위해 붙인 이름이다. 변수에는 값이 할당된다. - 변수 이름 sum이 기억하는 메모리 공간에 저장된 것은 10 + 20이 아니라 값 30이다. 따라서 10 + 20은 할당 이전에 평가되어 값을 생성해야 한다. 2. 리터럴 리터럴(literal)은 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법(notation)을 말한다. ..
Q. 자바스크립트에서 변수를 선언하고 값을 할당하는 일련의 과정을 설명해보세요. (1) 변수 선언 키워드 (var, let, const)로 변수 이름을 선언하면, 메모리 공간을 확보하여 값을 저장하기 위한 준비를 한다. - 메모리 공간을 확보하고 - 변수 이름과 확보된 메모리 공간의 주소를 연결한다. -> 즉 값을 저장할 수 있게 준비하는 것이다. -> 이 메모리 공간은 해제되기 전까지는 보호된다. (2) 자바스크립트 엔진은 변수 선언을 2단계에 걸쳐 수행한다. - 선언 단계: 변수 이름을 실행 컨텍스트에 등록해서 자바스크립트 엔진에 변수의 존재를 알린다. - 초기화 단계: 값을 저장하기 위한 메모리 공간을 확보하고, 암묵적으로 undefined를 할당해 초기화한다. (초기화 단계를 거치지 않으면, 확보..
문제 링크 1. 접근 방법 (1) 이진탐색트리에서 루트를 기준으로 왼쪽 노드의 value는 작은 수, 오른쪽 노드의 value는 큰 수다. 이 특성을 이용해서 재귀로 풀면 된다. (2) 찾는 val이 루트의 value보다 크면 오른쪽을 재귀로 탐색한다. (3) 찾는 val이 루트의 value보다 작으면 왼쪽을 재귀로 탐색한다. if (root.val < val) { return searchBST(root.right, val); } else { return searchBST(root.left, val); } (3) edge case 예외처리 해 준다. if (!root) return null 2. 전체 해답 /** * Definition for a binary tree node. * function Tre..
1. 접근 방법 (1) 종료조건이 있고 반복되는 연산이 있으므로 재귀로 풀 수 있다. (2) 앞에 두 노드를 바꾸고 + 나머지 리스트를 합친다. 그리고 그 나머지 리스트 중 앞에 두 노드를 바꾸고 + 나머지의 나머지 리스트를 합친다. 결국, 한 단계 내에서 수행할 연산은: 앞에 두 노드를 바꾸고 + 두번째 노드에 나머지 리스트를 합치는 작업이다. let temp = head.next; head.next = temp.next; temp.next = head; head.next = swapPairs(head.next) (3) 예외처리를 추가한다. 앞의 두 노드의 위치를 바꿀 필요가 없는 경우는 그냥 리턴해준다. if (head == null) return head; if (head.next == null) ..
문자열 뒤집기 문제. 1. 접근 방법 (1) 문제가 재귀 알고리즘 분류 안에 있고 + 내가 재귀를 공부해야 하고 + 각 반복적인 연산으로 특정 조건에 다다를 때까지 수행하면 되기 때문에 재귀로 접근한다. (2) 인덱스 양쪽 끝에서부터 원소를 교체해, 가운데 mid 지점으로 옮겨갈 때까지 재귀 수행 - 베이스 케이스: 왼쪽 인덱스가 가운데 인덱스보다 커지면 함수를 종료한다. - 점화식: 두 인덱스에 해당하는 값끼리 교체해 준다. 그리고 인덱스를 하나씩 옮겨준다. 2. 전체 해답 /** * @param {character[]} s * @return {void} Do not return anything, modify s in-place instead. */ var reverseString = function(..
1. 접근 방법 mid의 제곱이 바로 찾는 값이 되면 true를 반환하고, 이진탐색으로 left와 right를 옮겨가며 마지막까지 남은 mid값이 조건을 충족하지 않는다면 false를 반환한다. 2. 전체 풀이 /** * @param {number} num * @return {boolean} */ var isPerfectSquare = function(num) { if (num === 1) return 1; let left = 1; let right = Math.floor(num / 2); while (left