function solution(numbers) {
let answer = [];
for (let num of numbers) {
// 주어진 숫자를 2진 문자열로 변환
let binaryStr = num.toString(2);
// 0이 포함되지 않은 경우, 모든 비트가 1인 경우
if (!binaryStr.includes('0')) {
binaryStr = '0' + binaryStr; // 가장 앞에 0을 추가
}
// 이진 문자열을 배열로 변환
let arrNum = binaryStr.split('');
// 배열을 뒤에서부터 반복하여 첫 번째 0을 1로 바꾸고, 바로 다음 비트를 0으로 변경
for (let i = arrNum.length - 1; i >= 0; i--) {
if (arrNum[i] === '0') {
arrNum[i] = '1'; // 첫 번째 0을 1로 변경
if (i < arrNum.length - 1) {
arrNum[i + 1] = '0'; // 다음 비트를 0으로 변경
}
break;
}
}
// 수정된 이진 문자열을 다시 정수로 변환하여 결과 배열에 추가
answer.push(parseInt(arrNum.join(''), 2));
}
return answer;
}