(코드카타) - 0이 자꾸 나오는데 몇 개인지 세어보자
문제
양수 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):
bins = format(N, 'b')
zero_count = 0
zero_num = []
for bin in bins:
if bin == '0':
zero_count += 1
else:
zero_num.append(zero_count)
zero_count = 0
return int(max(zero_num))
format 함수를 이용해서 주어진 N(int)를 2진수 string으로 바꿔주었다. b 앞에 #을 붙여주면 0b
가 붙어서 나온다.
이후 2진수로 바뀐 N의 string 0의 개수를 하나씩 세어주었다. 문자가 0이라면 zero_count를 하나씩 올려주고, 아니라면 zero_num 이라는 리스트에 여태까지 발견한 zero_count의 수를 순서대로 넣어주었다.
그런다음 zero_count를 0으로 초기화 시켜서 다시 0부터 세어주게 만들었다. 연속된 0이 필요하니깐!
이후 zero_num에서 가장 큰 수를 리턴해주면 끝!
단점
- 난잡한가..?
Author And Source
이 문제에 관하여((코드카타) - 0이 자꾸 나오는데 몇 개인지 세어보자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@holyja/알고리즘코드카타-0이-자꾸-나오는데-몇-개인지-세어보자저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)