Muscardinus

2개 이하 다른 비트 본문

알고리즘 문제/[프로그래머스] Lv2

2개 이하 다른 비트

Muscardinus 2022. 4. 5. 14:15
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