https://programmers.co.kr/learn/courses/30/lessons/77885
코딩테스트 연습 - 2개 이하로 다른 비트
programmers.co.kr
[ 풀이 ]
먼저 숫자가 짝수인지 홀수인지 판별해야 한다.
1. 짝수일 경우
짝수는 비트로 표현하면 항상 맨 오른쪽 비트가 0이 된다. 이 때 숫자에 1을 더하게 되면 마지막 비트만 1로 바뀌게 된다.
즉, 짝수의 경우 원래 수에 + 1 만 해줘도 "서로 다른 비트의 개수가 2 이하이다" 라는 조건을 만족시키게 된다.
2. 홀수일 경우
- 만약 비트 문자열에 0이 없을 경우 비트 문자열의 맨 왼쪽에 0을 추가해준다.
- 비트 문자열에서 "0"중 가장 맨 오른쪽에 있는 "0" 의 위치에 대한 인덱스를 구한다.
- n = ( 비트 문자열의 길이 - 인덱스 - 2 ) 라고 했을 때, 기존의 숫자에 + 2^n 하면 정답이 된다.
[ 전체 코드 ]
class Solution {
public long[] solution(long[] numbers) {
long[] answer = new long[ numbers.length ];
for( int i = 0 ; i < numbers.length ; i++ ){
String bit = Long.toString( numbers[i] , 2 );
answer[i] = fx( bit , numbers[i] );
}
return answer;
}
static long fx( String bit , long num ){
if( num % 2 == 0 ) return num + 1 ;
else{
if( bit.indexOf( "0" ) == -1 ){
bit = "0" + bit;
}
int n = bit.length() - 2 - bit.lastIndexOf("0");
return num + (long)Math.pow( 2 , n );
}
}
}
'코딩 테스트 공부 > 프로그래머스' 카테고리의 다른 글
| [ JAVA ] 프로그래머스 - 2 x n 타일링 (0) | 2022.06.23 |
|---|---|
| [ JAVA ] 프로그래머스 - 모음사전 (0) | 2022.06.21 |
| [ JAVA ] 프로그래머스 - 쿼드압축 후 개수 세기 (0) | 2022.06.17 |
| [ JAVA ] 프로그래머스 - k 진수에서 소수 개수 구하기 (0) | 2022.06.16 |
| [ JAVA ] 프로그래머스 - 양궁대회 (0) | 2022.06.15 |