Algorithm

[codility] Lesson 1 | binary gap - 파이썬(Python) | Iterations

토오오끼 2021. 11. 7. 17:13
728x90
반응형

 

https://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

곧 있을 코테가  코딜리티에서 진행된다고 하여 플랫폼에 익숙해 지기 위해 코딜리티에서 문제를 풀기 시작했다.

영어로 되어 있는 사이트라 문제도 영어라서 차근차근 읽어보고 제대로 코드를 짜는 것이 가장 중요할 것 같았다.

lesson 1부터 코테 전까지 최대한 많이 풀어보려고 노력해야할 것 같다.

 

코딜리티의 lesson 1 문제는 아래와 같다.

10진수를 2진수로 바꾼 후 binary gap이라는 것을 구하여 길이가 가장 긴 binary gap의 길이를 출력하는 문제이다.


def solution(N):
    
    answer = ''
    
    bin_N = bin(N)
    bin_N = bin_N[2:]
    
    
    idx_ls = []    
    for idx, i in enumerate(bin_N) :
        if i == '1' :
            idx_ls.append(idx)

    if len(idx_ls) < 2 :
        return 0
        
    else :        
        grap = []
        for i in range(len(idx_ls)-1) :
            grap.append(idx_ls[i+1] - idx_ls[i] -1)
        
        answer = max(grap)
        
        return answer

먼저 십진수를 이진수로 바꿔서 숫자 '1'이 있을 때 인덱스를 뽑도록 enumerate함수를 사용하여 반복했다.

이진수로 바꿨을 때 '1'이 한 개만 있으면 binary gap이 없기 때문에 뽑아낸 인덱스 리스트의 길이가 2보다 작으면 바로 0을 반환하도록 했다.

'1'이 2개 이상이면 다시 for문으로 반복하며 (idx_ls[i+1] - idx_ls[i] -1)로 0의 개수를 구했다.

1이 연속으로 있어도 결과는 0이 나오기 때문에 문제 없이 코드가 실행되었다.

 

 

 

코딜리티에서 문제를 풀어보니 영어로 되어있다는 것만 빼면 프로그래머스랑 비슷하지만

다른 사람의 코드를 볼 수 없다는 것과 내가 푼 코드를 다시 볼 수 없다는 것이 조금 불편했다. 

나는 코테 연습을 하면서 IDE로 풀고 있었는데 IDE 사용 못하게 하는 경우가 많아서 사이트에서 바로 푸는 연습을 해야할 것 같다 ㅠㅠ...


해당 문제 풀이 코드

 

GitHub - YOOHYOJEONG/algorithm_practice: 알고리즘 공부 및 코딩테스트 준비

알고리즘 공부 및 코딩테스트 준비. Contribute to YOOHYOJEONG/algorithm_practice development by creating an account on GitHub.

github.com

 

728x90
반응형