🥹

📜 목차

알고리즘

모의고사

0~num string

1~num 까지 5의 배수로만 구성된 string

문자열의 각 글자로 만들수 있는 두 글자 배열

NestJS

Exception filter

상속과 구현

Soft-Delete

JOIN

알고리즘

📌 map()

// 콜백 함수에 배열의 각 요소, 인덱스, filter를 실행한 전체 배열을 넘겨줍니다.
function cb(ele, idx, arr) {
  return ele * 2;
}

const arr = [1, 2, 3, 4, 5];
const result = arr.map(cb);

console.log(result); // [2, 4, 6, 8, 10]
const arr = [1,2,3]

arr.map((item, index, arr) => {
	console.log(`요소값: ${item}`, 인덱스: ${index}, this: ${JSON,stringify(arr)})
	return item
})

/*
요소값 1, 인덱스 0, this:[1,2,3]
요소값 2, 인덱스 1, this:[1,2,3]
요소값 3, 인덱스 2, this:[1,2,3]
*/

💭 모의고사

// 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.

// 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5,       1, 2, 3, 4, 5, ...
// 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5,       2, 1, 2, 3, 2, 4, 2, 5, ...
// 3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5,         3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...

// 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때,
// 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.

const answerTable = [
    // 1번 수포자가 찍는 방식
    [1,2,3,4,5],                // 5
    // 2번 수포자가 찍는 방식
    [2,1,2,3,2,4,2,5],          // 8
    // 3번 수포자가 찍는 방식
    [3,3,1,1,2,2,4,4,5,5]       // 10
]

function solution(answers){
    // 각각의 학생들의 점수를 저장하는 배열
    const answer = [0,0,0]
    
    for(let i = 0; i < answers.length ;  i++){
        for (let j = 0 ; j <answerTable.length ; j++){
        // answers[i] :  정답의 데이터 
        // answer[j] : 각각의 수포자가 찍은 배열 데이터를 가져옴 
        // i % answerTable[j].length 뭐...?
            if ( answerTable[ j ][ i % answerTable[j].length ] === answer[i] ){
                answer[j]++
            } 
        }
    }

    // 가장 많이 맞춘 점수 
    const biggest = Math.max(...answer)

    // 최고점수를 가진 학생을 answer 배열에서 찾아서 result에 넣기
    const result = []

    for ( let i = 0 ; i < answer.length ; i++ ){
        if( answer[i] === biggest ){
            result.push( i + 1 )
        }
    }
    return result
}

// map() 사용한 풀이
function solution(answers){
    const scoreList = answerTable.map( (el,j)  =>{
        const score = answers.reduce ((acc, cur, i) => {
            return acc + (
                el[i % el.length] === cur ? 1 : 0
            )
        }, 0)
        return {student : j + 1 ,  score: score}
    })

    const biggest = Math.max(...scoreList.map( el => {
        return el.score
    }))

    return scoreList.filter(el => {
        return el.score ===biggest 
    }).map( el => el.student )
}

💭 0~num string

양수 나열은 되는데 음수 나열이 안되고 있어서 보니까 for문에 있는 조건문 통과를 못해서 그런거였다🥹 받아온 수를 절대값으로 만들어주는 Math.abs() 메소드를 이용해서 음수를 양수로 바꾸고 if 문으로 양수일 경우와 음수일 경우를 나눠서 부호를 달리 붙여줬음!!

// 임의의 수(num)를 입력받아, 0부터 해당 num까지의 인덱스를 적은 문자열을 반환하는 함수를 완성하세요
    
// idxString(3) => '0123'
// idxString(0) => '0'
// idxString(9) => '0123456789'
// idxString(-2) => '0-1-2'

function idxString(num) {
    let result = ""
    for ( let i = 0; i <= Math.abs(num) ; i++ ){
        if (num < 0)
          {
            result += -i.toString()
          }
      else result += i.toString()
    }
  return result
}

💭 1~num 까지 5의 배수로만 구성된 string

Math.floor()함수를 사용해서 소수점 이하를 버린 만큼의 수를 반환하고 그 다음에 1부터 나온 수를 곱했음! 보통 for문의 기준이 되는 i 값을 0으로 두는데 여기선 그러면 계속 0만 반환하기 때문에 1로 둬야한다!