https://school.programmers.co.kr/learn/courses/30/lessons/77885
습관적으로 Integer.toBinaryString()을 사용했는데, 시간 초과가 되더라..
제한 시간을 매우 타이트하게 잡아놓은듯.
가장 오른쪽에 등장하는 0을 찾아서, 해당 자리수 - 1 의 자리에 해당하는 숫자만 1, 나머진 0으로 채운 2진수를 더해주면 원하는 값을 찾을 수 있다.
비트 연산으로 쉽게 푸는 분들이 있던데 비트 연산을 해본적이 없어서 안씀.
class Solution {
public long[] solution(long[] numbers) {
long[] answer = new long[numbers.length];
for (int i = 0; i < numbers.length; i++) {
answer[i] = fx(numbers[i]);
}
return answer;
}
long fx(long n) {
int idx = 0;
long v = n;
while (v > 0) {
if (v % 2 == 0) break;
v /= 2;
idx++;
}
if (idx == 0) return n + 1;
return n + Double.valueOf(Math.pow(2, idx - 1)).longValue();
}
}
'코딩테스트 > programmers' 카테고리의 다른 글
가장 큰 수 (0) | 2023.11.09 |
---|---|
쿼드압축 후 개수 세기 (0) | 2023.11.06 |
택배상자 (0) | 2023.11.06 |
2 x n 타일링 (0) | 2023.11.06 |
숫자 변환하기 (0) | 2023.11.03 |