코딩테스트
[프로그래머스/javascript] 2개이하의 다른 비트 (꼭 다시풀기)
_서리__
2023. 3. 8. 16:54
function solution(numbers) {
var answer = [];
function beat(n){
let num = n.toString(2);
if(num.length<17){
num="0".repeat(17-num.length)+num
}
let newNums = [];
for(let i=0;i<num.length;i++){
if(num[i]==="0"){
newNums.push(num.slice(0,i)+"1"+num.slice(i+1))
for(let j=i+1;j<num.length;j++){
if(num[j]==="0"){
newNums.push(num.slice(0,i)+"1"+num.slice(i+1,j)+"1"+num.slice(j+1))}
else{
newNums.push(num.slice(0,i)+"1"+num.slice(i+1,j)+"0"+num.slice(j+1))}
}
}
else if(num[i]==="1"){
newNums.push(num.slice(0,i)+"0"+num.slice(i+1))
for(let j=i+1;j<num.length;j++){
if(num[j]==="1"){
newNums.push(num.slice(0,i)+"0"+num.slice(i+1,j)+"0"+num.slice(j+1))}
else{
newNums.push(num.slice(0,i)+"0"+num.slice(i+1,j)+"1"+num.slice(j+1))}
}
}
}
return Math.min(...[...new Set(newNums)].map((el)=>parseInt(el,2)).filter((el)=>el>n))
}
for(let i=0;i<numbers.length;i++){
answer.push(beat(numbers[i]))
}
return answer
}
처음 푼 풀이 아주 더럽게 풀었다 ㅎㅎ..ㅎ
function solution(numbers) {
var answer = [];
//1.짝수인경우 -> 마지막 자리의 수가 0이므로 +1해주기
//2.홀수인경우 -> 뒤에서부터 세서 가장먼저 0인수를 찾아서 01을 10으로 바꿔주기.
for(let i=0;i<numbers.length;i++){
if(numbers[i]%2===0){
answer.push(numbers[i]+1)
}else{
let str = "0"+numbers[i].toString(2) //처음에 0을 붙여줌
for(let j=str.length-1;j>=0;j--){
if(str[j]==="0"){
answer.push(parseInt(str.substring(0,j)+"10"+str.substring(j+2),2))
break;
}
}
}
}
return answer
}
다른분들의 풀이를 참고해서 푼 풀이