이진법으로 바꾼뒤, 0의 갯수가 가장 큰 값 구하기
문제
양수 N을 이진법으로 바꿨을 때, 연속으로 이어지는 0의 갯수가 가장 큰 값을 return해 주세요.
이어지는 0은 1과 1사이에 있는 것을 의미합니다.
1과 1사이에 있는 0을 binary gap 이라고 하겠습니다.
input: 9
output: 2
설명: 9의 이진수는 1001 입니다. 1과 1사이에 있는 0은 2 이므로, 2를 return
코드
const solution = N => {
//2진법으로 바꾸기 .toString(2)
const num = N.toString(2);
console.log(num)
let temp = 0
let maxCount = 0
for (let i = 0; i < num.length; i++) {
if (Number(num.charAt(i)) === 0) {
temp++;
console.log('if temp->',temp)//1234 123
} else {
if (temp > maxCount) {
console.log('temp, maxCount->', temp, maxCount)//4 0
maxCount = temp;
console.log('else if maxCount',temp, maxCount)//4 4
}else{
console.log('else temp',temp)//0 4 3
temp = 0;
}
}
}
return maxCount;
}
//리펙토링
const solution = N => {
//2진수로 변경하기
let num = N.toString(2)//1000010001
//0만 짜르기
let cut = num.split(1)//[ '', '0000', '000', '' ]
let temp = []
//for ..of로 배열 순환하기
for (let i of cut) {
//temp에 cut을 하나씩 담는다
temp.push(i.length)//[ 0, 4, 3, 0 ]
console.log('i->', i)//'',0000,000,''
}
//pop으로 맨 뒷자리 제거
temp.pop()//[ 0, 4, 3 ]
// sort로 내림차순 정렬
temp.sort(function(a, b) {
return b-a//[ 4, 3, 0 ]
})
//첫번째 인덱스를 리턴
return temp[0]//4
}
console.log(solution(529))
풀이
진수변환
- 10진수를 진수 변환할때는 Number객체의 내장 함수인 toString()을 사용한다.
- 10진수 외의 다른 진수를 10진수로 변환할때는 전역 함수인 parseInt()을 사용한다.
Author And Source
이 문제에 관하여(이진법으로 바꾼뒤, 0의 갯수가 가장 큰 값 구하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@suminllll/이진법으로-바꾼뒤-0의-갯수가-가장-큰-값-구하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)