Algorithm/코딜리티

(코딜리티) Lesson 1 : Binary Gap - Python

casim 2021. 1. 15. 00:36

가끔 코딜리티를 활용한 코딩테스트를 치는 기업들이 보이는 것 같아서.. 접해보지만, 

 

주관적인 생각으로 많이 불편하다..?

 

프로그래머스는 문제를 풀면 다른사람들과 코드 비교도 할 수 있고, 본인이 이전에 짜놓은 코드를 볼 수 있는데,

 

이건 아직 그런 부분이 많이 미흡해서 문제풀고 공부하는 방안으로만 생각하던지, 본인이 푼 문제는 이렇게 저장해두는 것이 좋은 것 같습니다.

 

문제 : app.codility.com/programmers/lessons/1-iterations/

 

1. Iterations lesson - Learn to Code - Codility

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

app.codility.com

문제 설명

10진수를 주었을 때, 2진수의 1사이의 binary gap중 큰 값을 return하시오.

 

예를 들어, 9인 경우 이진수는 1001일 때, binary gap은 2입니다. 529인 경우는 1000010001일 때, 4와 3의 값을 가집니다. 20은 10100으로 1개, 15는 1111로 0개, 32는 100000으로 0개 입니다.

 

즉, N = 1041일 때, 이진수는 10000010001이므로  5를 return합니다. binary gap이 없는 경우는 0을 return합니다.

제한 사항

N = 1 ~ 2,147,483,647

코드

def solution(N):
    
    binary = format(N, 'b')

    m = 0
    count = 0
    for i in binary:
        if '1' == i:
            if m < count :
                m = count
            count = 0
        else :
            count += 1

    return m

 

* 사실 처음에는 binary로 만드는 법을 몰라서 직접 수식으로 짠게 아래 코드입니다..

def solution(N):
    
    binary = []
    while N > 1 :
        r = N%2
        N = N//2

        binary.append(r)

    m = 0
    count = 0
    while binary:
        if 1 == binary.pop():
            if m < count :
                m = count
            count = 0
        else :
            count +=1

    return m

 

간단한 문제라 그런지 둘다 100% 나오긴 했습니다 ㅎㅎ...

제일 처음 짠 코드는 이진수와 count하는 2개의 while문을 하나로 합칠 수도 있을 것 같네요...