프로그래머스 js 다음 큰 숫자

이명진·2022년 4월 22일
0

코드카타

목록 보기
23/69

2단계 연습문제이다.

문제 해석

숫자가 주어지고 숫자를 이진수로 변환 후에 변환한 이진수에서의 1개수와
비슷한 2진수를 찾은다음 그중에서 작은 숫자를 리턴하면 된다.

예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)이다.

이 문제는 나름 까다로울줄 알았다.
1의 개수가 같아야 하기에 다양한 숫자를 조합해서 그중에서 작은 숫자를 찾기 위해 10진수로 변환하여서 찾아야 되었기에 재귀함수를 써야 되지 않을까
생각했었는데 문득 작은 숫자를 찾아야 하니 파라미터로 받은 숫자를 하나씩 늘려가면서 1의 개수가 같은 것만 찾으면 되지 않을까라는 생각이 들었고

로직으로 풀어냈더니 한번에 맞출수 있었다.

풀이

아래는 내 로직이다.

function solution(n) {
  let triger = true;
// while문의 트리거 이다. 조건에 맞으면 false로 변경해주자. 
  let num = n;
  let arr = n.toString(2).split('')
// 일단 파라미터의 값에서 1의 개수를 찾아야 하기 때문에 2진수로 변환한다.  
  let find1 = 0; //1의 개수를 담아주는 역할 
  arr = arr.map(x=>{
    return x === '1' && find1++
  })
 

  
  while(triger){
// 파라미터 의 수를 1씩 늘려가며 이진수로 변환하여 1의 개수를 맞출때까지 찾는다. 
    let target1=0
    num = n++
    let isRight = n.toString(2)
    isRight = isRight.split('')
    isRight.map(x=>{
      return x === '1' && target1++
    })

    if(find1 ===target1 ){
      triger=false
 			return num
    }
    
  }
	return num
}

while문을 돌려주는데 조건에 맞을때까지 돌려준다.

쉽게 풀수 있었고 한번에 통과할수 있었다.
뿌듯했다.

나름 간단하게 푼거같은데 다른사람의 풀이를 확인해보니
다 코드들이 짧다..

정규 표현식을 쓴 사람도 있고 다양했다.

더 열심히 해야 겠다. ㅠㅠ

profile
프론트엔드 개발자 초보에서 고수까지!

0개의 댓글