일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로그래머스
- 연결리스트
- RT scheduling
- 웹팩
- 프론트엔드
- RxJS
- 이진탐색
- 자바스크립트
- 연결 리스트
- 알고리즘
- 포인터
- Machine Learning
- 배열
- pytorch
- APOLLO
- 컨테이너
- 큐
- cors
- vue3
- 해시테이블
- 타입스크립트
- 릿코드
- GraphQL
- alexnet
- 프로세스
- 코딩테스트
- 스택
- 자료구조
- 브라우저
- C
- Today
- Total
목록분류 전체보기 (164)
프린세스 다이어리
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/M64mh/btrmKZLPCY5/eyPOLlG7KdLp4i08AMqv71/img.png)
Q. 자바스크립트에서 변수를 선언하고 값을 할당하는 일련의 과정을 설명해보세요. (1) 변수 선언 키워드 (var, let, const)로 변수 이름을 선언하면, 메모리 공간을 확보하여 값을 저장하기 위한 준비를 한다. - 메모리 공간을 확보하고 - 변수 이름과 확보된 메모리 공간의 주소를 연결한다. -> 즉 값을 저장할 수 있게 준비하는 것이다. -> 이 메모리 공간은 해제되기 전까지는 보호된다. (2) 자바스크립트 엔진은 변수 선언을 2단계에 걸쳐 수행한다. - 선언 단계: 변수 이름을 실행 컨텍스트에 등록해서 자바스크립트 엔진에 변수의 존재를 알린다. - 초기화 단계: 값을 저장하기 위한 메모리 공간을 확보하고, 암묵적으로 undefined를 할당해 초기화한다. (초기화 단계를 거치지 않으면, 확보..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b168Iw/btrmzMlYxzZ/1TOIQ6xTl3mtxWXH4UGkvk/img.png)
문제 링크 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..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/beKnXB/btrmvdZf8sP/NGPs0Ozy4R85fyF9ltp8A1/img.png)
1. 접근 방법 (1) 리스트의 끝까지 재귀로 타고 들어간 다음, 끝에서부터 하나씩 돌아오면서 역순으로 노드를 연결해준다. (2) head.next가 마지막 노드인 경우는 head.next가 아무것도 가리키지 않는 상태이므로 head.next.next === NULL 이라고 볼 수 있다. 이 head.next를 이전 노드, 즉 head를 가리키도록 한다. head.next.next = head; (3) head는 더이상 head.next를 가리킬 필요가 없으므로 연결고리를 끊어준다. head.next = null; (4) 해당 단계를 마치면 이전 재귀 단계로 한 단계 돌아와 같은 방법으로 수행한다. 2. 전체 해답 /** * Definition for singly-linked list. * functio..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/HTxOo/btrmjI6Bigo/5SQk2c9WEWx6eJQiZz5SA1/img.png)
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) ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/6LLmY/btrmzkbiigc/EvHrRxswrPpxU4n5qNYmXK/img.png)
문자열 뒤집기 문제. 1. 접근 방법 (1) 문제가 재귀 알고리즘 분류 안에 있고 + 내가 재귀를 공부해야 하고 + 각 반복적인 연산으로 특정 조건에 다다를 때까지 수행하면 되기 때문에 재귀로 접근한다. (2) 인덱스 양쪽 끝에서부터 원소를 교체해, 가운데 mid 지점으로 옮겨갈 때까지 재귀 수행 - 베이스 케이스: 왼쪽 인덱스가 가운데 인덱스보다 커지면 함수를 종료한다. - 점화식: 두 인덱스에 해당하는 값끼리 교체해 준다. 그리고 인덱스를 하나씩 옮겨준다. 2. 전체 해답 /** * @param {character[]} s * @return {void} Do not return anything, modify s in-place instead. */ var reverseString = function(..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/v8V9B/btrmbmgMjuX/oJXLQ46uukMAg0Zi1WyG2K/img.png)
1. SSR vs CSR? 브라우저에서 실제로 우리가 보는 화면을 최종적으로 어디서 만들어서 보여주느냐, 어떻게 개발하느냐에 따라서 CSR, SSR로 나뉜다. CSR은 클라이언트 사이드 렌더링으로, 처음에 브라우저가 서버로부터 HTML과 static 파일을 받아오고 나면, 사용자의 요청에 따라 js를 통해 view를 동적으로 렌더링하는 방식이다. 화면에 보여줄 내용을 클라이언트에서 생성하기 때문에 클라이언트 사이드 렌더링이라고 한다. SSR은 서버에 새로운 페이지에 대한 요청을 할 때마다 서버로부터 HTML과 data가 덧붙여진 템플릿을 받아온다. 요청할 그 때마다 브라우저의 새로고침이 일어나는 것이다. 서버에서 view가 어떻게 보여질지 해석하여 보내주기 때문에 서버 사이드 렌더링이라고 한다. 2. C..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/nfPSL/btrmpwKKirX/FqKzw5TQaS5zWI8HxZlQgk/img.png)
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
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/2PMnL/btrmpxipily/OwgsgdqHvA8kowkEhJpAR0/img.png)
문제 링크 1. 접근 방법 (1) 이진탐색 분야로 구분돼 있으나 도무지 이진탐색이 떠오르지 않아 재귀로 풀었다. 연산을 쪼개어 작은 연산의 결과를 다음 연산에도 계속 쓰기 때문에 재귀가 잘 어울리는 문제다. (2) 분할정복의 원리를 이용하여 시간복잡도 O(logN)로 풀어낼 수 있다. 거듭제곱을 이용하여(x^4 * x^4 = x^8 이 되는 원리) 풀면 속도가 한 번 당 절반으로 줄어든다. 그냥 단순 반복문 O(N)으로 풀어도 되기는 하는데 주어지는 값의 범위가 너무 커지면 시간초과가 날 수 있다. n이 짝수면 절반으로 줄여서 제곱하고, n이 홀수면 1 뺀 값을 절반으로 줄여서 제곱한 후, 한 번 x를 추가로 곱해서 리턴한다. if (n % 2 === 0) { const answer = getPow(x,..