codility의 lesson을 다시 풀어 봅니다.
입력받은 양의 정수 N을 이진수로 변경한 뒤 처음 1과 다음 1 사이의 0의 갯수가 binary gap.
이진수 안에서 가장 긴 binary gap을 반환하면 되는 문제
public static int solution(int n) {
return Stream
.of(Integer.toBinaryString(n)
.replaceAll("0+$", "")
.split("1+"))
.filter(Objects::nonNull)
.map(String::length)
.max(Integer::compare)
.orElse(0);
}
Integer.toBinaryString(n)replaceAll("0+$", "")toBinaryString(n)을 toBinaryString(n >>> Integer.numberOfTrailingZeros(n) 이렇게 바꿔 replaceAll() 부분을 제거 가능filter(Objects::nonNull)map(String::length)max(Integer::compare)orElse(0)split("1+")으로 1사이의 0으로만 이뤄진 배열을 만드는 것은 생각도 안 해봤다.