프로그래머스 LEVEL 2(2개 이하로 다른 비트)
-
사용 언어 : javascript
-
해결 날짜 : 2022-10-08
- 해결 방법 :
- number가 홀수인 경우, 2진수로 변환 후 0이 나오는 가장 작은 비트만 1인 값 저장 (min_add)
- 예) 1011 => 100, 111 => 1000
- number에서 min_add를 더하고, min_add의 반만큼 뺀 값 push()
- number가 짝수인 경우, number에 1 더한 값 push()
- 회고 :
- 처음에 findIndex()로 만족하는 가장 작은 인덱스의 값을 찾았으나 findIndex()의 시간 복잡도가 O(n)이기 때문에 효율성 테스트에서 통과하지 못함
-
코드
function solution(numbers) { const answer = []; for (const number of numbers) { if (number % 2) { const binary = number.toString(2); let index = binary.split('').reverse().findIndex((e) => e === '0'); if (index < 0) index = binary.length; let min_add = parseInt('1' + '0'.repeat(index), 2); answer.push(number + min_add / 2) } else answer.push(number + 1); } return answer; }
- 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges