20240119

귤금·2024년 1월 19일

Node.js 4기 TIL

목록 보기
17/86

Today?

Node.js 입문주차 (2주차)

강의 들으면서 열심히...몽고DB랑 kjy-shop 프로젝트를 연결했다....


오늘 배운 것

회고

코드카타

1) 두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.

//내가 짠 코드
let solution = (left,right) => {
    let arr=[];
    let num = 0;
    for(i=0; i<=right-left; i++){
        arr.push(left+i)
    }
    let results = arr.map((n)=> {
        let result = [];
        for (i = 1; i<=n; i++) {
            if (n % i === 0) {
                result.push(i);
            }
        }
        return result;
    })
    results.forEach((array)=>{
        if(array.length%2===0){
            num+=array[array.length-1]
        } else {
            num-=array[array.length-1]
        }
    })
    
    return num
}

//내가 짠 코드 2
let solution = (left,right) => {
    let arr=[];
    for(i=0; i<=right-left; i++){
        arr.push(left+i)
    }
    return arr.reduce((pre,now)=>{
        let num = Math.sqrt(now);
        if(num%1 === 0){
            return pre-now;
        } else {
            return pre+now
        }
    },0)
}

//다른 사람 코드
function solution(left, right) {
    var answer = 0;
    for (let i = left; i <= right; i++) {
        if (Number.isInteger(Math.sqrt(i))) {
            answer -= i;
        } else {
            answer += i;
        }
    }
    return answer;
}

//다른 사람 코드 2
function solution(left, right) {
  let answer = 0;

  for (let i = left; i <= right; i++) {
    let count = 0;
    for (let j = 1; j <= i; j++) {
      if (i % j === 0) count++;
    }
    if (count % 2) answer -= i;
    else answer += i;
  }

  return answer;
}

두 번 풀었다. 처음에는 약수를 전부 구해서 배열로 담은 새 배열을 리턴하고->그 약수가 담긴 배열의 length를 구하여 짝수면 배열의 마지막 값(예 : [1,2,3,6]에서 6)을 더하고 홀수면 마지막 값을 빼도록 알고리즘을 짰는데... 만들다보니까 대체 약수가 짝수가 아닌 경우는 어떤 경우지? 라는 생각이 들었음... 본인의 제곱근 하나가 더 들어 있으면 홀수가 된다. 즉, 정수를 제곱한 수라면 빼 줘야 한다. 그래서 reduce를 써서 한 번 더 풀었다. 제곱근을 구하고, 그 제곱근이 정수라면 빼주고 정수가 아니라면 더해주는 식으로 진행했다.
다른 사람이 푼 코드(1)를 보니 동일한 원리를 이용했는데, 뭔가... isInteger라는 함수가 있는 듯 했다. 처음 알았음!
그리고 다른 사람이 푼 코드(2)도... for문으로 전체 숫자 루프를 돌려서 나누어떨어지는 횟수만큼 count에 더해준 듯하다. 그리고 그 횟수가 짝수면(2의 나머지가 없으면)+1, 홀수면 -1.. 이건 내 풀이(1)과 동일한 원리다. 그러나 횟수가 중요하기 때문에 나처럼 약수를 전부 배열에 넣어두는 무식한 방법은 쓰지 않아도 되는 것이다...

0개의 댓글