문제
한 번에 k칸 앞으로 갈 수도 , 현재까지 온거리 *2 위치로 순간이동을 할 수도 있다
k칸 점프시에는 k만큼 건전시 사용량이 드는 반면 순간이동은 건전지를 소모하지 않을 때
n만큼 떨어진 장소로 이동할 때 최소 건전지 소모량을 리턴
나의 풀이
function solution(n)
{
let answer = 0;
while (n > 0) {
if (n % 2 === 0) {
// 현재 거리가 짝수일 경우
n /= 2;
} else {
// 현재 거리가 홀수일 경우
n -= 1;
answer++;
}
}
return answer;
}
- while
- 앞으로 k칸을 점프하면 k만큼 건전시 사용량이 든다는 조건으로 거리가 0이 될 때까지 계속 루프 (점프 또는 순간이동 선택)
- 짝수 홀수 판별 짝수시엔 순간이동을 선택하고 , 홀수 일 때는 -1을 빼서 짝수로 만든후 순간이동 선택한다
다른 풀이
function solution(n) {
if (n === 1) return 1;
const nArr = Array.from(n.toString(2));
return nArr.reduce((a, b) => (+a) + (+b));
}
- 숫자 n을 이진수로 변환 후, 각 자릿수별로 분리하여 배열로 만듦
- a와 b를 숫자로 변환하고 두 숫자를 더한 결과를 반환
- 어떠한 수 n을 2로 나누고 그 몫을 또 2로 계속 해서 나누면 나오는 나머지들의 합은 어떠한 수를 이진수로 변환한 수의 1의 개수와 같다는 것에서 .. 활용
function solution(n)
{
return n.toString(2).replace(/0/g,"").length
}
- 이진수 변환후 0을 모두 제거하고 남은 문자열의 길이를 반환
function solution(n)
{
if(n == 1) return 1;
var battery = 0;
// n을 2로 나눠가며 나오는 나머지의 합
while(n>0) {
battery += n%2;
n = Math.floor(n/2);
}
return battery;
}
'기초다지기 > JS 코딩테스트' 카테고리의 다른 글
javaScript 최빈값 구하기 (1) | 2023.12.07 |
---|---|
javaScript 그리디 알고리즘으로 최적해 구하기 (1) | 2023.11.29 |
javaScript 푸드파이트 대회 (0) | 2023.11.27 |
javaScript 숫자 배열 두 개 뽑아서 더하기 (1) | 2023.11.27 |
javaScript 2018 KAKAO BLIND RECRUITMENT 비밀지도 (0) | 2023.11.24 |