Search

2개 이하로 다른 비트

알고리즘
연습문제
플랫폼
프로그래머스
JCF
Long
StringBuilder
상태
해결
생성 일시
2024/01/28 07:09
최종 편집 일시
2024/01/28 12:20

문제 설명

해결과정

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
복사