JavaScript - LeetCode Random Algorithm Test(10)

먹보·2023년 3월 17일
0

1. Happy Number (No.0202)

문제 설명

Write an algorithm to determine if a number n is happy.
A happy number is a number defined by the following process:

  • Starting with any positive integer, replace the number by the sum of the squares of its digits.
  • Repeat the process until the number equals 1 (where it will stay), or it loops endlessly in a cycle which does not include 1.
  • Those numbers for which this process ends in 1 are happy.

Return true if n is a happy number, and false if not.

해석

숫자 n이 행복한 숫자인지 확인하는 함수를 구현해주세요.

여기서 행복한 숫자란, 숫자의 각 자리수에 제곱을 한 뒤 더한 값이 1이 되는 수를 뜻하는데 만약 1이 되지 않으면 이 과정을 1이 될 때까지 반복한 후 행복한 수가 될 수 있으면 true를 없으면 false를 반환하세요.

예제

코드

function isHappy(n: number): boolean {
  const stored : Map<number,boolean> = new Map();
  while(n !== 1 && !stored.get(n)){
    stored.set(n,true);
    n = sumOfSquares(n);
  }
  return n === 1
};


function sumOfSquares(n : number) : number {
  return Array.from(String(n), Number).reduce((a,b) => a + Math.pow(b,2),0)
}

🗒️코멘트

세가지 짚고 넘어가야 할 점

  1. 접근 방식 : 이 문제에서 가장 난해했던 포인트는 바로 언제 이 함수를 끝낼 것인가에 대한 해답이다. 2~3번 반복할 때 까지는 규칙을 발견 할 수 없었기에 예제를 계속 만들어봤고 1이 되지 않을 가능성을 본 곳이 바로 이전에 만들어진 수가 다시 반복해서 나올 때 일 수도 있겠다는 생각이들어 hashmap에 특성을 이용하여 등장한 숫자들을 기록하고 만약 그 숫자가 또 등장했을 경우 loop을 탈출하게 로직을 구현하였다. 그랬더니..두둥! 완성이 되어서 기뻤다.

  2. Array.from : 기존 iterable한 객체는 Array.from이 적용 된다는 사실을 어느정도 알고 있었기 때문에 split을 사용하여 쪼개기보다는 Array.from을 사용해보았다.

  3. reduce의 잘못된 사용 : reduce의 초기값을 설정해놓지 않으면 0번째 인덱스를 초기 값으로 세팅해놓고 콜백함수가 진행된다는 사실을 이번 기회에 깨달았다.


2. Count Negative Numbers in a Sorted Matrix (No.1351)

문제 설명

Given a m x n matrix grid which is sorted in non-increasing order both row-wise and column-wise, return the number of negative numbers in grid.

해석

내림차순으로 정렬된 m x n 매트릭수가 주어졌을 때, 음수의 갯수를 반환하는 함수를 구현해주세요.

예제

코드

function countNegatives(grid: number[][]): number {
  let count = 0;
  grid.forEach((el) => {
    for(let i = el.length-1 ; i >= 0 ; i--){
      if (el[i] >= 0) break;
      count++
    }
  })
  return count++
};

🗒️코멘트

NULL


3. Number of Strings That Appear as Substrings in Word (No.1967)

문제 설명

Given an array of strings patterns and a string word, return the number of strings in patterns that exist as a substring in word.
A substring is a contiguous sequence of characters within a string.

해석

여러 문자열이 담긴 배열과 단어 하나가 주어졌을때 배열 안에 있는 문자들 중 단어에 포함되어 있는 문자열의 갯수를 반환하는 함수를 구현해주세요.

예제

코드

function numOfStrings(patterns: string[], word: string): number {
  let count = 0;
  for (let str of patterns){
    word.includes(str) ? count++ : null 
  }
  return count
};
//다른 풀이법
function numOfStrings(patterns: string[], word: string): number {
  return patterns.filter((el) => word.includes(el)).length
};

🗒️코멘트

으악 필터가 있는데 왜 또 일반 for문을 사용하려 한 것이냐!

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

0개의 댓글