본문 바로가기

내용 복습

(47)
프로그래머스 1단계 내적 - arr.reduce function solution(a, b) { var answer = 0; for(let i=0; i acc += a[i] * b[i], 0); } reduce( accumulator, currentValue, currentIndex ) 이 순인데 (이전 호출의 결과값, 현제 요소의 값, 배열의 인덱스위치) 순이다. _는 사용하지 않는 인자일 경우 다음인자를 사용하기 위해 넣어준 것이고, 이전 호출의 결과값인 acc에 계속 값을 더해가는 방식으로 누적해가는 것이다. reduce() : 해당 배열의 모든 요소를 하나의 값으로 줄이기 위해 두 개의 인수를 전달받는 콜백함수를 실행한다. 이때 명시된 콜백함수에 배열의 첫 번째 요소와 두 번째 요소를 인수로 전달하고 실행한다. 그 결과 반환한 결괏값과 세 번쨰 ..
error: MongoServerError: E11000 duplicate key error collection node.js에 mongoDB를 연동하다가 발생한 에러이다. 코드를 간소화하는 과정에서 skema의 필드의 이름을 좀 더 명확한 이름으로 정의하려고 원래의 프로젝트에서 이름만 변경했는데 post메소드를 thunder client로 시험하는 과정에서 문제가 발생했다. get메소드에서는 문제가 없어서 원래 필드와 다른 이름을 가진 데이터는 직접 삭제했기에 눈치채지 못했는데, post를 하면서 원래의 이름과 같은 필드명을 가진 필드에서 문제가 발생한 것이다. 그래서 몽고디비 아틀라스 사이트에 들어가서 직접 지워주고 다시 post를 시도하니 해결되었다. 이렇게 프로퍼티에 unique 문제가 발생했다는 표시가 있다. 이 문제가 발생한 필드를 지워주니 정상적으로 post메소드가 동작하였다. 에러 문제를 해결하기 전..
프로그래머스 1단계 - 나누어 떨어지는 숫자 배열 처음에 내가 생각한 방식 역시 filter를 사용하여 삼항연산자로 푸는 방식이었다. 하지만 문법적으로 자잘한 에러가 났고 배열 메소드의 사용법을 잘 익혀야겠다고 생각하게 되었다. 특히 answer에 arr.filter를 할당하는 것이 헷갈렸던 점이다. filter를 쓰고 또 조건문에서 push를 써야된다고 생각하니 로직이 꼬였다. function solution(arr, divisor) { var answer = arr.filter(v => v%divisor == 0); return answer.length == 0 ? [-1] : answer.sort((a,b) => a-b); } 결국 문법적인 에러에 계속 부딪혀 푸는 방식을 수정하여 function solution(arr, divisor) { var..
프로그래머스 1단계 - x만큼 간격이 있는 n개의 숫자 function solution(x, n) { var answer = []; for(let i=1; i (i+1) * v) } 이렇게 짧은 코드로 나왔다. array.fill.map을 체이닝해서 만든 로직인데 사실 fill이라는 배열 내장 메소드가 있는지도 처음 알았다. fill() arr.fill(value, start, end); 첫번째 인자인 value만 필수값이고 시작인덱스와 끝인덱스는 옵셔널이다. map() arr.map(callback(currentValue, index, array)); 매개변수로 콜백함수를 받는데 3가지 인자를 가질 수 있다. index, array는 선택사항이다. [1,2,3].map((v, i) => (v + i)); // 실행 결과 : [1, 3, 5] 위 코드에서 v..
함수와 변수선언 3가지씩 정리 *선언과 할당 - 선언 : 변수명을 자바스크립트 엔진에 알리는 것 - 할당 : 변수에 값을 저장하는 것(=할당연산자) => 변수선언은 '선언 - 초기화 - 할당'의 3단계를 거친다. 이를 lifecycle이라고도 한다. i)선언단계(Declaration phase) : 변수를 실행 컨텍스트의 변수 객체에 등록. 이 객체가 스코프가 참조하는 대상이 된다. ii)초기화단계(Initialization phase) : 선언단계의 변수 객체를 위한 메모리는 만드는 단계. 할당된 메모리는 undefined로 초기화 iii)할당단계(Assignment phase) : 사용자가 undefined로 초기화된 메모리의 다른 값을 할당하는 단꼐 *TDZ(Temporal Dead Zone) 직역하면 일시적인 사각지대라는 뜻인..
프로그래머스 0단계 - 각도기 각에서 0도 초과 90도 미만은 예각, 90도는 직각, 90도 초과 180도 미만은 둔각 180도는 평각으로 분류합니다. 각 angle이 매개변수로 주어질 때 예각일 때 1, 직각일 때 2, 둔각일 때 3, 평각일 때 4를 return하도록 solution 함수를 완성해주세요. 내가 푼 답: function solution(angle) { if (angle < 90){ return 1 } else if (angle == 90){ return 2 } else if (angle < 180){ return 3 } else { return 4 } } 더 나은 답: 삼항 연산자를 이용한 풀이 function solution(angle) { return angle < 90 ? 1 : angle === 90 ? 2 ..
Math 내장 객체 오늘 알고리즘 공부를 시작했다. 진작 했어야 했는데 다른 공부를 한다는 핑계를 대며 계속 미뤄왔다. JS로 공부했고, 0단계부터 시작했는데, 아직 크게 어려운 문제는 없었는데, 그냥 연산자로 풀기보단 Math라는 객체를 이용하여 푸는 문제가 있길래 정리해 봤다. Math는 수학적인 상수와 함수를 위한 속성과 메서드를 가진 내장 객체이고 Number 자료형만 지원하며 BigInt와는 사용할 수 없다. - 메서드 1. Math.abs(x) : 절댓값을 반환 2. Math.random() : 0과 1 사이의 난수를 반환 3. Math.sqrt(x) : x의 제곱근을 반환 4. 최대-최소(배열을 넣으려면 ...(스프레드 연산자)를 이용하면 됨.) 1) Math.min(x,y,z...) : 가장 작은 값 반환 2..