-
[프로그래머스/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 }
다른분들의 풀이를 참고해서 푼 풀이
'코딩테스트' 카테고리의 다른 글
[못풀었다/javascript/릿코드] merge two sorted lists (0) 2023.03.24 [프로그래머스/javascript] 다리를 지나는 트럭 (좀 더 효율적으로 다시풀기) (1) 2023.03.17 [프로그래머스/javascript] 2Xn 파일링 (0) 2023.03.08 [프로그래머스/javascript] 게임맵 최단거리 (시간나면 다시풀기) (0) 2023.03.07 [프로그래머스/javascript] 프렌즈 4블록(못풀었다..꼭 다시풀기) (0) 2023.03.07