앞에서 이미 +1 해서 찾는 법을 알려줬기 때문에 이렇게 쉽게 ..문제를 알려주는건가.. 싶어서 나혼자 풀이법 찾을려고 노오력을 했는데 .. 결국은 안되게 되었다.
function solution(n) {
var two_jin= n.toString(2).split('');
var go_check=0;
var count_1=0;
var count_0=0;
for(var i=0; i<two_jin.length; i++){
if(two_jin[i]=='0' && two_jin[i+1]=='1' &&go_check==0){
two_jin[i+1]='1;
two_jin[i]='0';
go_check=i+1;
i+=1;
continue;
}
if(two_jin[i]=="1" &&go_check!=0 ){
count_1+=1;
}
if(two_jin[i]=="0" &&go_check!=0) {
count_0+=1;
}
}
if(count_0==0){
two_jin.push('0'),
count_0+=1
}
for(var i=go_check+1; i<two_jin.length; i++){
if(count_0>0){
two_jin[i]='0';
count_0-=1;
continue;
}
else{
two_jin[i]='1';
}
}
return parseInt(two_jin.join(''),2)
}
78을 이진법으로 바꾸면
1001110
이다. 우리는 0 1 이렇게 반복해서 나온것을 토대로

1 0 으로 바꿔준뒤 뒤에 있는 배열의 숫자들의 1 과 0 을 카운트 한다음
0부터 채우는걸로 바꾼다음 1 을 채운다음 그값을 토대로 10진수로 바꿔주는거라고 생각했다.
근데 2개 빼고 다 틀려서 뭐지.. 싶었는데
110 인 경우 1001 이 나와야된다.
즉 01 으로된것을 찾을수 없다는 것이다.. 그래서 다 틀린거 같다.
https://latte-is-horse.tistory.com/186
해결방안으로는
public int solution(int n) {
int answer = 0;
int cntN = Integer.bitCount(n);
int cntA = 0;
while(true){
n++;
cntA = Integer.bitCount(n);
if(cntN == cntA){
answer = n;
break;
}
}
return answer;
}
}
