DAY 08

yejichoi·2022년 11월 21일
0

CodeCamp

목록 보기
9/11
post-thumbnail

1. Algorithm Self Study

텍스트자릿수 더하기
자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

function solution(n) {
    n = String(n) // 숫자의 각 자릿수에 접근하기 위해 문자로 바꿔줌 
    let answer = 0;
    for( let i = 0; i < n.length; i++ ) {
        answer += Number(n[i]) // 숫자로 변환해서 더해줌 
    }
    return answer;
}
//Reference Code (reduce)
function solution(n) {
    const answer = String(n)// 문자로 변환
                    .split("") // 각 요소에 접근
                    .reduce( ( cu, el ) => {
//무조건 앞에 오는게 합이고 (acc) 뒤에 오는게 현재 값(cur)
                     return cu + Number(el);    
                    }, 0)
    return answer;
}

arr.reduce(callback[, initialValue])
1. callback 에 들어갈 인수
accumulator - callback함수의 반환값 누적
currentValue - 배열의 현재 요소
index(Optional) - 배열의 현재 요소 인덱스
array(Optional) - 호출한 배열
2. initialValue(Optional)
callback함수 실행 시 accumulator 인수에 제공되는 값
초기값을 제공하지 않을경우 배열의 첫 번째 요소를 사용

Callback 함수란?

x만큼 간격이 있는 n개의 숫자
함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다.

function solution(x, n) {
    const answer = [];
    
    for( let i = 1; i <= n; i++ ) {
        answer.push( i * x );
    }
    return answer
}
// Reference Code (map)
function solution(x, n) {
    const answer = new Array(n)
                    .fill(1) // answer = 1, 1, 1, .. 
                    .map( (num, i) => {
                        return (num + i) * x;   
                    })
    //for문으로 생각하고 풀기
    //(1 + 0) * 2 = 2
    //(1 + 1) * 2 = 4
    //(1 + 2) * 2 = 6
    //(1 + 3) * 2 = 8
    //(1 + 4) * 2 = 10 
    //n의 길이만큼 반복 => new Array(n).fill(1)
    return answer;
}

fill() - 배열 초기화
const arr = new Array(4).fill('A');
fill() 함수를 배열을 초기화 하는데 사용하면 유용합니다.
new Array() 구문을 사용하여 배열을 생성하면,
4개의 element를 가지는 배열이 생성되고,
각 element의 값은 undefined
여기에 fill() 함수를 사용하면, 생성된 배열의 element의 초기값을 지정할 수 있음

문자열 내림차순으로 배치하기
문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.

function solution(s) {
    const answer = [];
    
    for( let i = 0; i < s.length; i++ ) {
        answer.push(s[i]);
    }
    answer.sort( (a, b) => {
        return a > b ? -1 : 1
    }) //내림차순
    
    return answer.join("");
}

sort()
오름차순 return a - b
내림차순 return b - a

Reference Code (split)
function solution(s) {
    const answer = s.split("")
                    .sort( (a, b) => {
                        return a > b ? -1 : 1   
                    }).join("");//내림차순
    return answer;
}

K번째수
배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.
예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면
1. array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
2. 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
3. 2에서 나온 배열의 3번째 숫자는 5입니다.
배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

function solution(array, commands) {
    const answer = [];
    
    for( let idx = 0; idx < commands.length; idx++ ) {
        const i = commands[idx][0]; // 이중배열의 첫번째값
        const j = commands[idx][1]; // 이중배열의 두번째값
        const k = commands[idx][2]; // 이중배열의 세번째값
        
        const result = array.slice( i - 1, j ) // 0부터 시작(-1)
                            .sort( (a, b) => {
                                return a - b //오름차순
                            })
        answer.push( result[k - 1] ) //인덱스 0부터 시작 
    }
    
    return answer;
}
//Reference Code ( map )
function solution(array, commands) {
    const answer = commands.map( el => {
        
        const result = array.slice( el[0] - 1, el[1] )
                            .sort( (a, b) => {
                                return a - b   //오름차순
                            })
        return result[ el[2] - 1 ]
    }) 
          
    return answer;
}

2. Backend Class

SQL vs NoSQL

관계형 데이터베이스 관리시스템에서 사용되는 SQL을 관계형 DB의 의미로, 비관계형 데이터베이스 관리시스템에서 사용되는 NoSQL을 비관계형 DB의 의미로 사용
SQL의 대표적인 예로는 Oracle, MySQL, Postgresql 등이 있으며, NoSQL의 대표적인 예로는 MongoDB

ORM테이블로 이루어진 데이터베이스를 다룰 때 사용하는 SQL을 다른 언어에서 쉽게 사용하도록 해줌
ODM은 문서(document)와 collection으로 이루어진 NoSQL 데이터베이스를 다룰 수 있도록 해줌

MongoDB

  • mongoDB에서는 데이터가 Document로 불리며, 이 데이터의 집합을 Collection(RDMS에서는 Table)
  • 스키마 제약 없이 자유롭고, BSON(Binary JSON) 형태로 각 문서가 저장되며 배열(Array)이나 날짜(Date) 등 기존 RDMS에서 지원하지 않던 형태로도 저장할 수 있기 때문에 관계를 연결하는 JOIN이 필요 없이 한 문서에 좀 더 이해하기 쉬운 형태 그대로 정보를 저장할 수 있다는 것이 특징
  • 문서지향 데이터베이스로, 객체지향 프로그래밍과 잘 맞고 JSON을 사용할 때 아주 유용 => Node.js에서 가장 많이 사용되는 데이터베이스

MongoDB Compass
MongoDB 조작을 쉽게 해주는 관리 도구
CLI(Command Line Interface)
터미널

Docker-compose

  • 복수 개의 컨테이너를 실행시키는 도커 애플리케이션이 정의를 하기 위한 툴
  • 도커로 만들어진 각자의 다른 컴퓨터들의 포트포워딩을 위해 그룹핑하는 것
  • YAML 파일을 사용하여 애플리케이션의 서비스를 구성
    => YAML 파일로 여러 개의 docker 내부 속성을 설정하고 YAML 파일을 실행시켜 마치 docker를 일괄적으로 한 번에 실행시키는 것과 같다고 생각하면 됨
version: "3.7"

services:
    my-backend: // 컴퓨터 이름 
        build:
            context: .
            dockerfile: Dockerfile
        ports:
            - 3000:3000

    my-database: //컴퓨터 이름 
 		image: mongo:5
        ports:
            - 27017:27017

ODM(Object Document Mapping) & Mongoose

Mongoose는 Node.js와 MongoDB를 위한 ODM(Object Data Mapping) library
호환성이 없는 JavaScript와 MongoDB의 데이터를 Mapping하여 간편한 CRUD를 가능하게 해줌

3. HW

0개의 댓글