JavaScript - LeetCode Random Algorithm Test(17)

먹보·2023년 4월 14일
0

1. Perfect Number (No.507)

문제 설명

A perfect number is a positive integer that is equal to the sum of its positive divisors, excluding the number itself. A divisor of an integer x is an integer that can divide x evenly.
Given an integer n, return true if n is a perfect number, otherwise return false.

해석

한 숫자의 약수들의 합이 자기 자신과 같을 때, 이 숫자를 완전수라고 합니다. 숫자가 완전수인지 판단하는 함수를 구현해주세요.

예제

코드

function checkPerfectNumber(num: number): boolean {
  const halfNum = Math.trunc(num/2);
  const divisors = [];
  for (let i = 1 ; i <= halfNum ; i++){
    if(num%i === 0) divisors.push(i)
  }
  return divisors.reduce((a,b) => a+b,0) === num
};
//리팩토링
function checkPerfectNumber(num: number): boolean {
  const halfNum = Math.trunc(num/2);
  let sum = 0;
  for (let i = 1 ; i <= halfNum ; i++){
    if(num % i === 0) sum += i
  }
  return sum === num
};

🗒️코멘트

약수를 구해야 한다는 생각에 배열을 선언하고 거기에 약수를 담았고 그 약수의 합을 구했다.

손코딩의 단점이 이게 아닐까 싶다.

코딩을 오랫동안 배우지 않은 사람들이 step by step으로 문제를 접근한다고 생각을 하다보니 약수를 일일이 기록해야 한다고 생각하기에 메모리를 잡아먹고 거기에다가 메서드를 하나 더 추가해서 시간 복잡도를 까먹는다.

굳이 약수들을 기록하지 않아도 바로 합쳐버리면 이러한 문제가 없어지기 때문에 축적하는 형식으로 리팩토링을 해주었다.


2. Counter (No. 2620)

문제 설명

Write a function that accepts an integer n and returns a counter function. This counter function initially returns n and then returns 1 more than the previous value every subsequent time it is called (n, n + 1, n + 2, etc).

해석

정수 n을 받고 counter 함수를 반환하는 함수를 구현해주세요. counter 함수는 처음에는 숫자 n을 반환하지만 호출되는 횟수가 증가됨에 따라 호출되는 횟수에 맞춰 n을 1씩 증가시킵니다.

예제

코드

function createCounter(n: number): () => number {
    let count = 0 
    return function() {
      ++count
      
      if(count === 1) {
        return n
      }
      
      n++
      
      return n
    }
}

🗒️코멘트

기본적으로 클로저에 대한 이해가 필요한 문제였다.


3. Sum of Digits in Base K (No.1837)

문제 설명

Given an integer n (in base 10) and a base k, return the sum of the digits of n after converting n from base 10 to base k.
After converting, each digit should be interpreted as a base 10 number, and the sum should be returned in base 10.

해석

10진법의 수 n이 주어졌을 때, k진법으로 변경 후 각 자릿수의 합을 반환하는 함수를 구현해주세요.

예제

코드

function sumBase(n: number, k: number): number {
  const nBaseK = n.toString(k);
  
  let sum = 0;
  
  for(let i = 0 ; i < nBaseK.length ; i++){
    sum += Number(nBaseK[i])
  }
  
  return sum
};

🗒️코멘트


profile
🍖먹은 만큼 성장하는 개발자👩‍💻

0개의 댓글