문제정보
n이 매개변수로 주어지는데
n보다 큰 수이면서 2진수로 변환했을때 1의 갯수가 같아야합니다.
또한 두 조건을 만족하면서 가장 작은 수를 찾으면 되는군요
저는 n+1 값부터 차례대로 비교하는 방법으로 답을 찾았습니다.
예시
입출력 예#1
문제 예시와 같습니다.
입출력 예#2
15(1111)의 다음 큰 숫자는 23(10111)입니다.
1의 갯수를 비교하는 방법을 구현하는게 중요할 것 같습니다.
나의풀이
function solution(n) {
let answer = 0;
let counter = n+1
function binarymaker(num) {
return num.toString(2).split(0).join('').length
}
while ( answer == 0 ) {
if(binarymaker(n) == binarymaker(counter)) {
answer = counter
}
counter++;
}
return answer
}
저는 while문과 1의 갯수를 세어줄 함수를 선언하는것으로 문제를 풀었습니다.
n과 counter의 1갯수를 비교하고 1갯수가 같지않다면 counter 값을 올려줬어요
처음엔 binarymaker에 join()을 안하고 풀었더니
2진수로 변환했을때 0이 하나도 없는 경우 답이 제대로 반환되지 않는 문제가 있었어요
제가 짜서 그렇게 생각하나 싶긴하지만
꽤 직관적으로 이해되는 코드라고 생각해요...
반응형
'programmers' 카테고리의 다른 글
[Programmers Level 0] 공던지기 Javascript (1) | 2022.11.30 |
---|---|
[Programmers Level 1] 예산 Javascript (0) | 2022.11.30 |
[Programmers Level 0] 잘라서 배열로 저장하기 Javascript (0) | 2022.11.28 |
[Programmers Level 0] 한번만 등장한 문자 Javascript (0) | 2022.11.25 |
[Programmers Level 2] JadenCase 문자열 만들기 Javascript (0) | 2022.11.25 |