728x90
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/77885
풀이 방법
- for문으로 해당하는 숫자를 찾을때 까지 반복한다면 시간초과 에러가 발생한다.
- 2진수로 바꿔준다음 생각하는 것이 좋다.
짝수인 경우 2진수에서 항상 0으로 끝나기에 끝에 1이 오는 숫자,
즉, 기존 숫자보다 1만큼 더 큰 숫자가 답이다 - 홀수는 2진수로 변환 후 비교해야하는데,
1이 한개 늘어나면 앞에 있는 비트의 범위가 커질 수 있기에 처음에 0을 붙여주고
'01' 패턴이 제일 먼저 나온 부분을 10으로 바꿔준 다음 10진수로 변환 후 반환한다. - 홀수의 예시를 들자면 두개의 수를 비교하자
20341 과 20342의 2진법으로 표현한 수는 100111101110101과 100111101110110이다.
여기서는 맨 마지막 두개의 비트가 해당하기에 10으로 바꾼 값이 적합한 답이 된다.
코드
const solution = (numbers) => {
let answer = [];
numbers.forEach((e) => {
if(e % 2 === 0){
answer.push(e + 1);
}
else {
let str = '0' + e.toString(2);
let idx = str.lastIndexOf('01');
str = str.substring(0, idx) + '10' + str.slice(idx+2);
answer.push(parseInt(str, 2));
}
})
return answer;
}
728x90
'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
2Level / 연습 문제 / 연속된 부분 수열의 합 (0) | 2023.10.03 |
---|---|
2Level / 연습 문제 / 택배상자 (0) | 2023.09.25 |
2Level / 연습 문제 / 2 x n 타일링 (0) | 2023.09.22 |
[JS] 2Level / 연습문제 / 124 나라의 숫자 (0) | 2023.09.21 |
[JS] 2Level / 연습문제 / 숫자 변환하기 (0) | 2023.09.18 |