🧬알고리즘/Programmers

[JavaScript] 1로 만들기

뉴발자 2024. 6. 12.
728x90

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

문제

정수가 있을 때, 짝수라면 반으로 나누고, 홀수라면 1을 뺀 뒤 반으로 나누면, 마지막엔 1이 된다.

 

예를 들어 10이 있다면 다음과 같이 연산된다.

 

 • 10 / 2 = 5

 • (5 - 1) / 2 = 2

 •  2 / 2 = 1

 

총 3번의 나누기 연산으로 1이 됐다.

 

정수들이 담긴 리스트 num_list가 매개변수로 주어질 때,

 

num_list의 모든 원소들을 1로 만들기 위해서 필요한 나누기 연산의 횟수를 반환하는 함수를 작성해라.

 

 

예시

num_list count 총 나누기 연산 횟수
[2, 4, 7] 3 3
[1, 2, 3] 2 5
[1, 1, 1] 0 5
728x90

 

 

나의 풀이

function solution(num_list) {
  // 총 나누기 연산 횟수를 저장할 변수
  let cnt = 0;
  
  // num_list의 모든 원소가 1이면 종료
  while(!num_list.every((v) => v === 1)) {
    num_list.map((v, i) => {
      // 원소가 1인경우
      if(v === 1) return;
      // 나누기 연산이 일어날 때마다 cnt + 1
      cnt++;
      num_list[i] = v % 2 ? (v - 1) / 2 : v / 2; 
    });
  }
    
  return cnt;
}

 

 

다른 풀이

function solution(num_list) {
  // toString으로 원소 값을 2진수로 변환
  return num_list.map(v => v.toString(2).length - 1).reduce((a, c) => a + c);
}

 

 

 

 

 

 

 

 

 

 

728x90

댓글