반응형
문제 설명
자바코드
class Solution {
public long[] solution(long[] numbers) {
long[] answer = new long[numbers.length];
for(int i=0;i<numbers.length;i++){
answer[i]=check(numbers[i]);
}
return answer;
}
public Long check(long number){
long result=number;
if(number%2==0){//짝수
result+=1;
}else{//홀수
int count=0;
while(number!=0){
count++;
if(number%2==0) break;
number=number/2;
}
if(number!=0)
result+=(Math.pow(2,count-1)-Math.pow(2,count-2));
else result+=(Math.pow(2,count)-Math.pow(2,count-1));
}
return result;
}
}
문제 풀이
이 문제는 다행스럽게 해설이 있습니다. -> 해설 보러가기
그러나 해설을 봐도 이해가 잘 안됩니다. ㅎㅎ
간단하게 결과값 출력 로직은 입력값이 짝수인지 홀수인지로 나뉘게 됩니다.
- 짝수 일때는 입력값에 +1 만 해주면 됩니다. 왜냐면 끝에 0이 되기 때문에 최대한 작은 수로 변경하는건 1만 더하면 되기 때문이죠.
- 홀수 일때는 또 0이 있을때와 없을때 다릅니다.
- 0이 있으면 제일 낮은 0이 몇번째있는지 확인하여 01을 10으로 바꿔주면 됩니다.
- 0이 없으면 총 몇비트인지 확인하여 1을붙여주고제일큰비트를0으로 바꿔주면 됩니다.
이 문제는 개인적으로 정말 풀기 어려웠습니다. 해설을 봐도 잘 이해가 안되고 며칠을 고민한 끝에 풀어내서 나름 뿌듯합니다.
반응형
'프로그래밍 > 알고리즘 풀이' 카테고리의 다른 글
백준 2580 스도쿠 자바 (0) | 2021.05.28 |
---|---|
백준 15886번 치킨 배달 자바 (0) | 2021.05.27 |
[알고리즘] 백준2661번 좋은수열 자바 (0) | 2021.05.19 |
[알고리즘] 백준 14889번 스타트와 링크 Java 자바 (0) | 2021.05.19 |
[알고리즘] 백준 2609번 최대공약수와 최소공배수 Java 자바 (0) | 2021.05.17 |
댓글