본문 바로가기
Coding Test/Codility

[ Codility 코딜리티 ] # Lesson 1 BinaryGap python 풀이

by SteadyForDeep 2021. 4. 10.
반응형

코딜리티는 네이버의 코딩테스트 플랫폼으로 알려져 있다. (언제 바뀔지 모름 주의)

 

개인적으로 아주 깔끔한 UI에 친절한 문제 설명이 주어지는 플랫폼인것 같다.

 

하지만 null input 이나 값이 없는 빈 리스트만 입력에 추가되어 있는 등

 

주의할 예외처리들이 다수 존재하는 실무형 문제가 많다.

 

문제의 대부분이 영어로 출제되는 만큼 코딩만 잘 해서는 문제를 바로 풀기가 힘들다.

 

 

 

//풀이

Lesson 1 요약

어떤 정수 N이 주어지면 이 N을 2진수로 바꿨을때 발생하는 binary_gap의 최대값을 구해라.

이때 binary_gap은 1과 1로 닫힌 공간 안에 있는 0의 갯수이다.

즉 10001 의 경우 3이고 1000 의 경우 없다.

없는 경우는 0을 출력해야한다.

 

언뜻 생각하면 이 숫자를 모두 이진화하여 가지고 있어야 할 것 같지만

 

이진화 과정을 생각해보면 몇 가지 조건을 통해서 2진화 과정 중간중간에

 

0의 개수를 카운트할 수 있는 것을 볼 수 있다.

def solution(N):
    # write your code in Python 3.6
    div, gap = N, 0
    binary_gap = []
    while div > 1:
        div, mod = divmod(div, 2)
        if mod:
            binary_gap.append(gap)
            gap = 0
        else:
            gap += 1
    binary_gap.append(gap)
    binary_gap[0] = 0
    return max(binary_gap)

 

//추신

 

나는 리스트에 담아서 그 중 max를 취하는 방식을 사용했지만

 

지금 글을 쓰면서 생각해보니 그냥 두 수의 비교만으로도 가능할 것 같다.

 

그게 더 간단하고 좋은 풀이일 것으로 생각되어 돌려보았으나

 

짝수에서 문제가 발생했다.

 

짝수의 경우 이진화 했을때 처음에 1로 시작하지 않는 수 인데

 

이 수의 경우 '닫히지 않은' 구간의 0 수를 그대로 내보내게 되었고

 

이것을 처리해 주는 것이 나에게는 더 낭비처럼 느껴졌다.

 

 

반응형

댓글