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
'🧬알고리즘 > Programmers' 카테고리의 다른 글
[JavaScript] 특정 문자열로 끝나는 가장 긴 부분 문자열 찾기 (0) | 2024.06.13 |
---|---|
[JavaScript] 특정한 문자를 대문자로 바꾸기 (0) | 2024.06.12 |
[JavaScript] 조건에 맞게 수열 변환하기 2 (0) | 2024.06.12 |
[JavaScript] 수열과 구간 쿼리 1 (1) | 2024.06.11 |
[JavaScript] 왼쪽 오른쪽 (1) | 2024.06.11 |
댓글