Programmers/Lv2
[프로그래머스/JS] 다음 큰 숫자 (Lv2) / num.toString()
hellosonic
2023. 8. 5. 18:26
문제요약
나의 코드 및 설명 01 (시간초과)
- n부터 1씩 숫자를 증가시키며, 10진수를 2진수로 변환하고, 1의 개수를 카운트한 후 1의 개수가 같은 수를 찾는다.
function solution(n) {
var answer = 0;
var bin = [];
var originCnt = 0;
var originNum = n;
while (true){
if (n == 0 || n == 1){
bin.push(n);
break;
}
bin.push(n % 2);
n = parseInt(n / 2);
}
bin.map(element => {
if (element == 1){
originCnt += 1;
}
});
console.log(originCnt);
var i = 1;
var newCnt = 0;
var result = 0;
while (true){
result = originNum + i;
answer = result;
newCnt = 0;
var newBin = [];
while (true){
if (result == 0 || result == 1){
newBin.push(result);
break;
}
newBin.push(result % 2);
result = parseInt(result / 2);
}
newBin.map(element => {
if (element == 1){
newCnt += 1;
}
});
console.log(answer, newCnt);
if (newCnt == originCnt) {
break;
}
i+=1;
}
return answer;
}
나의 코드 및 설명 02 (효율성 TC 한 개 시간초과)
function bin(n){
var result = [];
while (true){
if (n == 0 || n == 1){
result.push(n);
break;
}
result.push(n%2);
n = parseInt(n/2);
}
return result;
}
function count(array){
var cnt = 0;
for (let a of array){
if (a == 1) {
cnt += 1;
}
}
return cnt;
}
function solution(n) {
var answer = 0;
var num = n;
var originCnt = count(bin(n));
while (true){
num += 1;
if (count(bin(num)) == originCnt) {
answer = num;
break;
}
}
return answer;
}
다른 코드 및 설명
- num.toString()을 통해 10진수를 2진수로 변환하고, 1을 기준으로 문자열을 나누어서 배열의 길이를 구한 후 t비교한다.
function solution(n) {
var answer = 0;
var oneNum = n.toString(2).split("1").length;
while (true) {
n++;
if (n.toString(2).split("1").length == oneNum) return n;
}
return answer;
}
숫자.toString(숫자) : 숫자를 문자열 혹은 진수로 변환한다.
var num = 185;
console.log(num.toString()); // '185'
console.log(num.toString(2)); // '10111001'(10진수를 2진수로 변환하고 문자열로 변환)
console.log(num.toString(8)); // '271' (10진수를 8진수로 변환하고 문자열로 변환)