본문 바로가기

프로그래머스/구현

[구현] 프로그래머스 '2개 이하로 다른 비트' - js

반응형

1. 문제

https://school.programmers.co.kr/learn/courses/30/lessons/77885

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

2. 코드

풀이의 핵심은 아래의 글을 참고하였다.

https://school.programmers.co.kr/questions/37104

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

function solution(numbers) {
    let answer = [];
    
    for(let i=0;i<numbers.length;i++){
    	// 짝수라면 +1 한 값이 최소값
        if(numbers[i] % 2 === 0) answer.push(numbers[i]+1);
        // 홀수라면 첫번째 0을 1로 바꾸고 그 오른쪽 값을 0으로 바꾼 값이 최소값
        else{
            let temp = numbers[i].toString(2).split("");
            let zero = false;
            for(let j=temp.length-1;j>=0;j--){
                if(temp[j] === '0'){
                    temp[j] = 1;
                    temp[j+1] = 0;      
                    zero = true;
                    // 10진수 -> 2진수로
                    answer.push(Number(parseInt(temp.join(""),2)));
                    break;
                }
            }
            // 만약 numbers[i]에 0이 없다면 앞에 1 붙혀주고 첫번째 값 0으로 바꾼 temp 더해주기
            if(!zero){
                temp[0] = '0';
                let temp2 = ['1',...temp].join("");
                answer.push(Number(parseInt(temp2,2)));
            }
        }
    }
    
    return answer;
}
반응형