[CodeKata]Day16

박민하·2022년 6월 27일
0

python 문제

목록 보기
31/49
post-thumbnail

Code Kata 란, 2인 1조의 구성으로 서로 협력하여 하루에 한 문제씩 해결하는 과제입니다.


# 문제

양수 N을 이진법으로 바꿨을 때, 연속으로 이어지는 0의 갯수가 가장 큰 값을 return해 주세요.

이어지는 0은 1과 1사이에 있는 것을 의미합니다.
이런 것을 binary gap 이라고 합니다.
예를 들어,

input: 9
output: 2
설명: 9의 이진수는 1001 입니다. 
1과 1사이에 있는 0은 2 이므로, 2를 return
input: 529
output: 4
설명: 529의 이진수는 1000010001 입니다. 
1과 1사이에 있는 연속된 0의 수는 4와 3입니다.
이 중 큰 값은 4이므로 4를 return
input: 20
output: 1
설명: 20의 이진수는 10100 입니다. 
1과 1사이에 있는 연속된 0의 수는 1 뿐입니다.
(뒤에 있는 0은 1사이에 있는 것이 아니므로)
input: 15
output: 0
설명: 15의 이진수는 1111 입니다. 
1과 1사이에 있는 0이 없으므로 0을 return
input: 32
output: 0
설명: 32의 이진수는 100000 입니다. 
1과 1사이에 있는 0이 없으므로 0을 return

# 코드

def solution(N):
    count = 0
    max = 0
    for i in bin(N)[2:]:
        if i == "0":
            count += 1
        else:
            if max < count:
                max = count
                count = 0
            else:
                count = 0
    return max

# 풀이 과정

  1. 2진수로 바꿔주는 bin()함수 사용
  2. 앞의 0b값을 제거하기위해 slide 사용
  3. 0의 개수를 세다가 1이 나타나면 max와 크기 비교
  4. 1이 나타나지 않으면 max로 값이 이동하지 않음

+ 그 외 코드

def solution(N):
  binary = bin(N)[2:].strip("0").split("1")
  return max(len(x) for x in binary)
profile
backend developer 🐌

0개의 댓글