[CodeKata] 13. 이진수와 0의 갯수

그냥·2022년 6월 27일
0

CodeKata

목록 보기
13/18

문제

문제
양수 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


풀이


1. 문제의 조건 정리
1) 양수 N을 인자로 받는다.
2) 자연수를 반환한다.
3) 인자값을 이진수의 1사이에 있는 0의 갯수가 가장 많은 값을 반환한다.

2. 조건에 대한 코드 구현 방법 생각
1) 인자값을 이진수로 변환한다.
2) 변환된 값에 대해서 for문을 돌린다.
3) 1이면 cnt값을 lst에 추가하고, cnt=0으로 초기화 한다.
4) 0이면 cnt값을 += 1 해준다.
5) lst 내에서 가장 큰 값을 반환한다.

3. 구현 코드
def solution(N):
    N_bin = bin(N)[2:]
    N_list = list(map(int, str(N_bin)))
    cnt = 0
    lst = []

    for i in N_list:
      if i == 0:
        cnt += 1
      else:
        lst.append(cnt)
        cnt = 0
    return max(lst)

4. 코드 리뷰
1) 이진수 변환을 bin() 메소드를 활용하는 것 말고 다른 방법이 없을까?

0개의 댓글