728x90
반응형
목차
문제
https://school.programmers.co.kr/learn/courses/30/lessons/77885#
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 구현 방향
각 수에 대해 하나씩 늘려가며 해보는 것은 무조건 시간 초과가 날 것이라고 생각했다.
그래서 나는 그 수에서 가장 적게 늘리는 방법을 고민하였다.
비트를 차례차례 탐색한다.
1. 1이면 넘어간다
2. 0이면 1로 바꾸고 전자리를 0으로 바꾼다.
-> 다 돌았을 때 0이 없었으면 비트의 자리수를 늘려준 뒤 전 자리를 0으로 만든다.
코드 구현
//이진수로 표현하는 함수
function numToBinary(num){
let str = "";
while(num> 0){
str = num%2 + str;
num = Math.floor(num/ 2);
}
return str;
}
//이진수에서 다시 수로 바꾸어주는 함수
function binaryToNum(arr){
let num = 0;
let cnt =0;
for(let i=arr.length -1; i>=0; i--){
num += Math.pow(2, cnt) * arr[i];
cnt++;
}
return num;
}
//이진수 표현에서 가장 가까운 수 찾기
function closeValue(str){
let flag =1;
let arr = str.split("");
//0일때 예외처리를 해주어야 한다.
if(arr.length === 0) return [1];
for(let i=arr.length; i>= 0; i--){
if(arr[i] === "0"){
arr[i] ="1";
if(i+1 <=arr.length-1) arr[i+1] = "0";
flag = 0;
break;
}
}
if(flag){
arr[0] = "0";
arr.unshift("1");
}
return arr;
}
function solution(numbers) {
var answer = [];
for(let num of numbers){
const bNum = numToBinary(num);
const arr = closeValue(bNum);
answer.push(binaryToNum(arr));
}
return answer;
}반응형
'PS > 프로그래머스' 카테고리의 다른 글
| [프로그래머스][dfs] 후보키 (0) | 2025.11.26 |
|---|---|
| [프로그래머스][브루트포스] 문자열 압축 (0) | 2025.11.25 |
| [프로그래머스][unionFind] 전력망을 둘로 나누기 (0) | 2025.11.17 |
| [프로그래머스][수학] n^2 배열 자르기 (0) | 2025.11.08 |
| [프로그래머스][완전 탐색] 인사고과 (0) | 2025.11.03 |