본문 바로가기

코딜리티 문제풀이

Codility Lesson 01 - BinaryGap( JAVA )

https://app.codility.com/programmers/lessons/1-iterations/binary_gap/

 

BinaryGap coding task - Learn to Code - Codility

Find longest sequence of zeros in binary representation of an integer.

app.codility.com

 

문제

- N은 십진수로 전달되고, 이를 이진수로 변경하여 1과 1사이에 있는 0의 최대 갯수를 구하는 문제

- 예시

 number 9 has binary representation 1001 and contains a binary gap of length 2. The number 529 has binary representation 1000010001 and contains two binary gaps: one of length 4 and one of length 3

-> N = 9, 이진수 : 1001, binary gap : 2 / N = 529, 이진수 1000010001, binary gap : 4, 3( 큰값인 4가 binary gap이 된다 )

 The number 20 has binary representation 10100 and contains one binary gap of length 1. The number 15 has binary representation 1111 and has no binary gaps

-> N = 20, 이진수 : 10100, binary gap : 1 / N = 15, 이진수 : 1111, binary gap : 0

- binary gap이 존재시 gap중 최대값을 return, 존재하지 않으면 0을 return해라

 

풀이

- cnt - 임시 gap / maxgap - cnt중 최대 값

- 이진수로 변경하는 Integer.toBinaryString( int ) 활용

- forEach문을 통해 char 값을 비교하여 '0'일 경우 cnt+1, '1'일 경우 cnt와 maxgap의 값을 비교하여 maxgap 값 갱신 or cnt값 초기화

 

소스코드

class Solution {
    public int solution(int N) {
        // write your code in Java SE 8
        String binaryStr = Integer.toBinaryString(N);

        // binaryStr은 첫번째 자리가 무조건 1
        int maxgap = 0;
        int cnt = 0;
        for(char s: binaryStr.toCharArray()){
            if( '0' == s ){
                cnt++;
            }else{
                if( maxgap < cnt ){
                    maxgap = cnt;
                }
                cnt = 0;
            }
        }

        return maxgap;
    }
}