이진 변환 반복하기

·2022년 4월 8일
0

알고리즘

목록 보기
43/47
post-thumbnail

점점 문제를 요란하게 풀어가고 있는 중이다. . . .

function solution(s) {
 let count = 0
  let zero = 0
  let oldlen = 0
  let newlen = 0
  let answer = []
  change (s)
  function change (s){
    oldlen = s.split("").length
    if(newlen === 1){
      return s
    } else{
     newlen =  s.split("").filter(ele=>ele==="0"?false:true).length
     zero =  zero + oldlen - newlen
      count += 1
      change(newlen.toString(2))
    }
  }
  answer.push(count,zero)
  return answer
}
  1. 변수가 많다. 뭐...뭐 어쩔 수 없지
  2. 재귀함수를 반복한다.
  3. 갓 들어온 값을 배열로 변환하여 길이를 확인한다
  4. filter 메소드를 돌아서 0이 존재하면 다 빼버리고 길이를 변수에 넣는다.
  5. 제로라는 배열에 처음 들어온 배열의 값 - 0을 뺀 배열의 값을 더한다. // 이렇게 할 경우 사라진 0의 갯수를 확인할 수 있다.
  6. 변환 횟수인 count를 1 올려준다.
  7. 0이 빠진 배열의 길이를 2진법 변환해서 재귀함수로 돌린다.
  8. 반복되는 와중에 배열의 길이가 1이 된다면 재귀함수는 종료된다.
  9. 각각 변환이 된 횟수, 0이 빠진 갯수를 배열에 담아서 리턴한다.

뭐랄까 순차적으로 한단계씩 올라가는거 이거 엄청 재밌는 것 같다. 푸는 맛도 나고

profile
물류 서비스 Backend Software Developer

0개의 댓글