프로그래머스 - 2개 이하로 다른 비트

07.28에 푼 문제입니다🌷

2개 이하로 다른 비트

풀이법

2가지 경우로 나뉜다.

1. 0bit 가 있는 경우

  • 가장 뒤에 있는 0 을 1로 바꾼다!
  • 만약 0 뒤에 1이 있으면 1을 0으로 바꾼다!

예를 들어서 2를 이진수로 바꾸면 10이 된다.
이럴 땐 그냥 뒤에 0을 1로 바꾸면 된다.

11을 예로 들면 2진수로 바꾸면 1011이 된다.
가장 뒤에있는 0을 찾고 1로 바꿔준다.
바꿔준 1의 뒤에 있는 1을 0으로 바꾼다.
답은 1101이 된다.

2. 0bit가 없는 경우

  • 맨 앞 1을 0으로 바꾼다.
  • unshift()를 이용해서 1을 앞에 삽입한다.

예를 들어 3을 이진수로 바꾸면 11이다.
맨 앞 1을 0으로 바꾸고 (01)
앞에 1을 추가한다. (101)

function solution(numbers) {
    var answer = [];
    numbers.map(number=>{
        const bit = [...number.toString(2)]
        let ans=-1
        for(let i = bit.length-1;i>=0;i--){
            if(bit[i]==='0'){
                bit[i]='1'
                if(i<bit.length-1) bit[i+1]='0'
                ans = parseInt(bit.join(''),2)
                answer.push(ans)
                break
            }
        }

        if(ans===-1){
            bit[0]='0'
            bit.unshift('1')
            answer.push(parseInt(bit.join(''),2))
        }
    })

    return answer;
}

좋은 웹페이지 즐겨찾기