JavaScript - LeetCode Random Algorithm Test(7)

먹보·2023년 3월 10일
0

1. Number of 1 Bits (No.0191)

문제 설명

Write a function that takes the binary representation of an unsigned integer and returns the number of '1' bits it has (also known as the Hamming weight).

해석

"unsinged integer"의 이진법으로 인자로 주어졌을 때 1의 갯수를 반환하는 함수를 구현해주세요.

"unsigned integer"이란 말 그대로 sign이 없는 숫자를 뜻하며, 보통 0과 양의 정수를 포함한 Whole Integer를 의미한다.

예제

코드

// 내 코드
var hammingWeight = function(n) {
  return n.toString(2).replace(/0/g,"").length
};

// A 등급의 코드
var hammingWeight = function(int) {
    let count = 0;
    while (int !== 0) {
        const bitComparison = int & 1; 
        if (bitComparison === 1) count++;
        int >>>= 1; 
    }  
    return count;
};

🗒️코멘트

우선 내가 생각한 답변은 정말 간단하다. 그만큼 문제가 쉬웠으며 이미 프로그래머스를 통해 이러한 문제를 풀어보았기 때문이다.

그러던 중 다른 사람들의 답변을 찾아보게 되었고 우연찮게 해외 부트캠프 강사의 글을 읽고나서 내 답이 C급 답변이라는 것을 알게되었다.

단순하게 생각하면 가독성만을 따졌을 때, 주어진 인자가 작다면 내 방법이 적당할 수 있으나...메모리와 인자가 불확실하다는 점에서는 밑에 코드가 비트 연산자와 string으로 바꿀 필요가 없다보니 훨씬 좋다는 의견이다.

const bitComparison = int & 1; 

'&' Operator는 주어진 int와 1의 2 이진수를 비교하여 서로의 위치에서 수가 같을 경우 1을 다를 경우 0을 뱉어 낸다.

int >>>= 1

'>>>' Operator는 주어진 수를 이진수로 바꾼뒤 우항 만큼 오른쪽으로 이동시키는 것이다.


2. Guess Number Higher or Lower (No.0374)

문제 설명

We are playing the Guess Game. The game is as follows:
I pick a number from 1 to n. You have to guess which number I picked.
Every time you guess wrong, I will tell you whether the number I picked is higher or lower than your guess.
You call a pre-defined API int guess(int num), which returns three possible results:

  • -1: Your guess is higher than the number I picked (i.e. num > pick).
  • 1: Your guess is lower than the number I picked (i.e. num < pick).
  • 0: your guess is equal to the number I picked (i.e. num == pick).

Return the number that I picked.

해석

친구 두 명이서 업다운 게임을 진행하고 있습니다. 만약 부른 숫자가 다운일 경우 -1, 업일 경우 1 그리고 맞을 경우 0을 반환하는 함수를 구현해주세요.

guess(n) 함수를 호출하여 정답 여부를 확인 할 수 있습니다.

예제

코드

var guessNumber = function(n) {
  let correctness = guess(n);
  let boundary;
  while (correctness !== 0){
    if(correctness === 1){
      n = Math.trunc((boundary+n)/2)
      correctness = guess(n)
    } else {
      boundary = n
      n = Math.trunc(n/2)
      correctness = guess(n)
    }
  }
  
  return n
};

🗒️코멘트

수학 실력이 부족한건지 수식으로 변경하는 것이 부족한건지 잘 모르겠다.

해결법은 바로 떠올랐으나 조건에 따라 식을 입력하는 과정에서 많이 벙을 찌고 있었다.


3. Minimum Distance to the Target Element (No.1848)

문제 설명

Given an integer array nums (0-indexed) and two integers target and start, find an index i such that nums[i] == target and abs(i - start) is minimized. Note that abs(x) is the absolute value of x.
Return abs(i - start).
It is guaranteed that target exists in nums.

해석

정수로 이루어진 배열과 두 개의 정수 'target'과 'start'가 주어지고, 배열 내 'target'의 인덱스를 i라고 했을 때 (i-start)의 최솟 값을 반환하는 함수를 구현해주세요.

예제

코드

var getMinDistance = function(nums, target, start) {
  const targetIndex = [];
  nums.forEach ((x,el) => {
    if (x === target) targetIndex.push(el)
  })

  const distance = targetIndex.map((x) => Math.abs(x-start))

  return Math.min(...distance)
};

🗒️코멘트

사실 무난하게 일반적인 for 문을 한 번 돌려서 풀 수 있었지만 다른 Approach를 사용해서 풀어보았다.

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

0개의 댓글