본문 바로가기

알고리즘

코딜리티 Iterations - BinaryGap (파이썬)

알고리즘 공부할 필요성을 느껴 온라인 코딩테스트를 시도해 보고 있습니다.

테스트를 진행해 본 몇가지 중에 프로그래머스, 코딜리티(codility)가 괜찮은 것 같았습니다.

둘의 차이라면, 

 

  1. 프로그래머스: 한글설명, 주어진 예시만 해결해도 코드 에러발생율 적음
  2. 코딜리티: 영문설명, 주어진 예시외의 예외처리를 고려해야함

정도였던 것 같습니다.

 

개인적으로 코드 가독성에 중점을 두는 편인데
일부 인원이 작성한 숏코딩을 보면 난해해서 보기 어려운 경우도 있었습니다.

그래서 쉽게 코드를 짜서 공유하는게 좋겠다는 생각이 들었습니다.

 

 


Iterations - BinaryGap

 

문제링크: https://app.codility.com/programmers/lessons/1-iterations/binary_gap/

설명 (요약)

정수값 N이 입력되었을때 2진수로 변환시 1과 1사이의 0의 개수가 가장 긴 길이는?


N = 529 (10000010001), return 5  (1사이의 연속된 0의 개수중 가장긴것)
1041/5; 32/0; 328/2

 

고려사항

  • 모든 binary 의 시작은 1이다.
  • 1은 시작점이자 종료점이다. 1이 있을때마다 0을 계산하기만 하면 된다.

 

코드

 

def solution(N):
    z_max = 0
    z_cnt = 0
    b = format(N, 'b')		# format 을 이용한 진수변환. 'b'는 binary

    for bn in b:
        if bn == "1":
            z_max = max(z_cnt, z_max)
            z_cnt = 0
        else:
            z_cnt += 1

    return z_max


solution(1041)		# return 5

 

Github: https://github.com/oksk1111/algorithm_python/blob/main/codility_binarygap.ipynb

 

GitHub - oksk1111/algorithm_python

Contribute to oksk1111/algorithm_python development by creating an account on GitHub.

github.com

 

결과

 

 

 

반응형