[TIL] 2020.09.29 Algorithm

dev.soo·2020년 9월 29일
0

Python

목록 보기
5/6

문제 : 양수 N을 이진법으로 바꿨을 때, 연속으로 이어지는 0 중에서 가장 큰 값을 return해 주세요.

내가 푼 방식 :

def solution(N):
    num = format(N,'b')
    one_index = [i for i in range(len(num)) if num[i]=='1']

    zero_numbers = []
    if len(one_index) == 1:
        return 0
    else: 
        for i in range(1,len(one_index)):
            zero_numbers.append(one_index[i]-one_index[i-1])
        return max(zero_numbers)-1

모델:

def solution(N):
   binaryNumber = format(N, 'b')
   maximum = 0
   binaryNumberList = binaryNumber.strip('0').split('1')
   print(binaryNumberList)
   for x in binaryNumberList:
       if not x:
           continue
       if len(x) > maximum:
           maximum = len(x)
       
   return maximum

눈여겨 볼 것

binaryNumber.strip('0').split('1')

strip('0') 을 해서 맨 오른쪽의 0 을 없애준다. 맨 왼쪽은 당연히 1일테고, 100000 같은 수는 0이 아무리 많다 해도 1 사이에 있는 것이 아니기 때문이다.

split 은 충분히 쓸 수 있는 개념인데 자꾸 리스트나 딕셔너리로만 풀려고 한다. 이미 알고 있는 메쏘드를 활용하자.

    

0개의 댓글