분류 전체보기 (997) 썸네일형 리스트형 Weekly Report - 20/12/28~21/01/03, 190일차 보호되어 있는 글입니다. Prm 9 : power / recursion power 문제 두 수를 입력받아 거듭제곱을 리턴해야 합니다. 입력 인자 1: base number 타입의 자연수 (base >= 2) 인자 2: exponent number 타입의 정수 (exponent >= 0) 출력 number 타입을 리턴해야 합니다. 실제 계산 결과를 1000000009로 나눈 나머지를 리턴해야 합니다. 주의사항 Math.pow, 거듭제곱 연산자 사용은 금지됩니다. 시간복잡도 O(logN)을 만족해야 합니다. 나머지를 구하는 이유는 계산 결과가 컴퓨터로 나타낼 수 있는 수의 범위를 넘을 수 있기 때문입니다. 하지만 모든 연산이 끝난 뒤에 그 결과를 1000000009로 나누려고 해서는 안 됩니다. 연산 중간에도 이 범위를 넘을 수 있기 때문에, 연산을 할 때마다 나머지를 구하고 .. Prm 8 : LargestProductOfThree / sort largestProductOfThree 문제 정수를 요소로 갖는 배열을 입력받아 3개의 요소를 곱해 나올 수 있는 최대값을 리턴해야 합니다. 입력 인자 1 : arr number 타입을 요소로 갖는 임의의 배열 출력 number 타입을 리턴해야 합니다. 주의사항 입력으로 주어진 배열은 중첩되지 않은 1차원 배열입니다. 배열의 요소는 음수와 0을 포함하는 정수입니다. 배열의 길이는 3 이상입니다. 입출력 예시 let output = largestProductOfThree([2, 1, 3, 7]); console.log(output); // --> 42 (= 2 * 3 * 7) output = largestProductOfThree([-1, 2, -5, 7]); console.log(output); // -.. Prm 7 : tree DFS / recursion tree를 구성하는 Node 객체를 입력 받고, 해당 노드를 시작으로 하여 DFS(Depth First Search)를 하는 문제이다. 탐색되는 순서대로 노드의 값을 저장한 배열을 리턴하면 된다. 입력 인자 1 : node 'value', 'children' 속성을 갖는 객체 (Node) 'node.value'는 number 타입 'node.children'은 Node를 요소로 갖는 배열 출력 배열을 리턴해야 합니다. 기본 코드 나의 풀이 Ref. // 위 Node 객체로 구성되는 트리는 매우 단순한 형태의 트리입니다. // membership check(중복 확인)를 따로 하지 않습니다. Prm 6 : Sudoku / parseInt, [...Array().keys()].slice() sudoku 문제 스도쿠는 숫자 퍼즐로, 가로 9칸, 세로 9칸으로 이루어져 있는 표에 1부터 9까지의 숫자를 채워 넣는 퍼즐입니다. 퍼즐을 푸는 방법은 아홉 가로줄, 세로줄, 3X3 칸에 1에서 9까지의 숫자를 중복되지 않게 한 번씩만 넣으면 됩니다. 일부 칸이 비어있는 상태인 스도쿠 보드를 입력받아 스도쿠 퍼즐이 완성된 보드를 리턴해야 합니다. 입력 인자 1 : board 가로 길이(board[i].length)와 세로 길이(board.length)가 모두 9인 2차원 배열 matrix[i][j]는 1 이상 9 이하의 자연수 출력 가로와 세로의 길이가 모두 9인 2차원 배열을 리턴해야 합니다. 주의사항 입력으로 주어지는 board를 직접 수정해도 상관없습니다. 입력으로 주어지는 board 가지고 완성.. [요약] v8 엔진, 자바스크립트의 작동원리 정리- V8은 구글에서 주도적으로 개발한, 자바스크립트 파일을 기계어로 변환해주는 엔진이다. 크롬과 NodeJs에서 사용하고 있으며 Mircrosoft Edge도 V8을 이용하겠다고 선언한 바 있다. - C++로 작성되어 있다. 자바스크립트 코드를 받으면, parser와 AST를 거쳐 tree 구조로 코드가 해석되고, 이것이 ignition이라는 interpreter에 의해서 Bytecode로 변환되어 실행된다. -interpreter 방식은 최적화되지 않았으므로, bytecode로 실행되는 동안 TurboFan이라는 compiler를 통해서 컴파일을 하고 최적화된 기계어로 다시 실행한다. 즉, 반복될수록 코드 실행 속도가 빨라진다. :컴파일러는 코드 전체를 읽고 변환하여 실행시키고, 인터프리터는 코드를.. Prm 4 : recursion, combination 배운점 1. fibonacci와 같이 재귀적으로 2개 함수의 합을 구하는 방식은 시간복잡도가 2^N이 된다. ex) fibonacci(n-1) + fibonacci(n-2) 2. 제한적인 조건으로 초기 문제가 정의되고, 나머지 문제의 크기가 줄어드는데 초기 문제와 같은 형태가 된다면 recursion을 사용하는 것이 유리하다. 3. 26~41번 줄과 같이, 재귀함수를 쓰더라도 if문으로 분기하여 이미 구한 답은 리스트에서 꺼내오도록 하면 시간복잡도가 O(N)으로 줄어든다. (사진 아래에 계속) 4. (기타) Combination값 구하는 함수 곱셉은 for문으로 a 까지 차례대로 곱하되, 나눗셈은 if문으로 2개로 분기하였다. 3개의 자리에 2명을 배치할 수 있는 경우의 수 보통 N C i (combin.. BubbleSort 문제 BubbleSort를 .sort 메소드를 쓰지말고 직접 구현해보는 문제. 배울점 1. bubbleSort 자체가 두 값을 비교하여 큰 값을 뒤로 보내는 방식이다. 2. bubbleSort가 1회 실행되면, 리스트에서 가장 큰 값은 리스트의 제일 뒤쪽으로 가게 되며 이것은 1개의 값이 정렬된 것이라고 볼 수 있다. ex) [3, 4, 5, 9, 1, 2]와 같이 제일 큰 수 9가 애매한 위치에 있더라도 두 값의 위치를 바꾸는 것을 순차적으로 진행하면 9가 리스트의 맨 끝에 오게됨을 알 수 있다. 3. 최적화를 위해 6번줄에서와 같이 len - 1 - i를 반복문의 범위로 준다. 즉, 맨 뒤쪽의 정렬된 큰 값들은 신경쓰지 않도록 한다. 4. 2개의 값을 바꾸는 로직은 9번줄과 같이 ES6의 구조분해할당.. 이전 1 ··· 100 101 102 103 104 105 106 ··· 125 다음