Muscardinus
2개 이하 다른 비트 본문
728x90
https://programmers.co.kr/learn/courses/30/lessons/77885
코딩테스트 연습 - 2개 이하로 다른 비트
programmers.co.kr
이 문제는 2가지 조건으로 나누어서 풀면 되는 문제이다.
1. 맨 뒤 비트가 0일 때
이 경우 단순히 맨 뒤 비트를 1로 바꿔주면 해당 수보다 큰 수 중 가장 작은 값이 된다.
ex: 1110(14) -> 1111(15)
2. 맨 뒤 비트가 0이 아닐 때
이 경우, 뒤에서 부터 첫번째로 등장하는 "01"을 찾는다. 그리고 이 부분을 "10"으로 바꿔주면 2비트만 바꾸어 만들 수 있는 가장 작은 값이 된다.
ex: 11011(27) -> 11101(29)
function solution(numbers) {
const answer = [];
for (let i = 0; i < numbers.length; i++) {
const num = numbers[i];
const bit = '0' + num.toString(2);
if (bit[bit.length - 1] === '0') {
bit[bit.length - 1] = '1';
answer.push(num + 1);
} else {
for (let j = bit.length - 1; j >= 0; j--) {
if (bit[j] === '0') {
const mBit = bit.slice(0, j) + "10" + bit.slice(j + 2, bit.length);
answer.push(parseInt(mBit, 2));
break;
}
}
}
}
return answer;
}
728x90
'알고리즘 문제 > [프로그래머스] Lv2' 카테고리의 다른 글
교점에 별 만들기 (0) | 2022.04.06 |
---|---|
전력망을 둘로 나누기 (0) | 2022.04.05 |
피로도 (0) | 2022.04.04 |
배달 (0) | 2022.04.04 |
괄호 회전하기 (0) | 2022.04.03 |
Comments