문제 설명
해결과정
Solution.java
import java.util.*;
class Solution {
public long[] solution(long[] numbers) {
StringBuilder sb = new StringBuilder();
long[] answer = new long[numbers.length];
for(int i = 0; i < numbers.length; i++) {
sb.setLength(0);
long number = numbers[i];
if(0 <= number && number <= 2) {
answer[i] = number+1;
continue;
}
String binaryString = Long.toBinaryString(number);
int lastZero = checkBinaryString(binaryString);
int length = binaryString.length();
// 모든 비트가 1이라는 뜻
if(lastZero == 0) {
sb.append("10");
int cnt = 0;
while(cnt != length-1) {
sb.append("1");
// System.out.println(sb.toString());
cnt++;
}
}
// 모든 비트가 1이 아니라는 뜻
else {
sb.append(binaryString);
// 마지막 비트가 1이라면
if(binaryString.charAt(length-1) == '1') {
sb.setCharAt(lastZero, '1');
sb.setCharAt(lastZero+1, '0');
}
// 마지막 비트가 0이라면
else {
sb.setCharAt(length-1, '1');
}
}
String binary = sb.toString();
answer[i] = Long.parseLong(binary, 2);
// System.out.println(binaryString);
// System.out.println(binary);
}
return answer;
}
public int checkBinaryString(String binaryString) {
int lastZero = 0;
for(int i = 0; i < binaryString.length(); i++) {
if(binaryString.charAt(i) == '0') {
lastZero = i;
}
}
return lastZero;
}
}
Java
복사