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는 주어진 수를 이진수로 바꾼뒤 우항 만큼 오른쪽으로 이동시키는 것이다.
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
};
수학 실력이 부족한건지 수식으로 변경하는 것이 부족한건지 잘 모르겠다.
해결법은 바로 떠올랐으나 조건에 따라 식을 입력하는 과정에서 많이 벙을 찌고 있었다.
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를 사용해서 풀어보았다.