Programmers_2개 이하로 다른 비트(python)
프로그래머스 -2개 이하로 다른 비트 문제 입니다.
1. 문제
https://programmers.co.kr/learn/courses/30/lessons/77885#
2. 분류 및 난이도
Programmers 문제입니다.
월간 코드 챌린지 시즌2 문제입니다. Level 2난이도의 문제입니다.
3. 생각한 것들(문제 접근 방법)
- 규칙을 찾아야하는 문제입니다.
- 질문하기에서 힌트를 얻어 작성하였습니다.
- ‘11011’ 이라는 숫자가 있으면 0이 처음으로 나오는 곳을 찾아 2진수로 만듭니다. -> ‘00100’ 그리고 그 보다 하나 오른쪽으로 쉬프트한 값 ‘00010’의 차이만큼 더해주면 값이 나옵니다.
4. 접근 방법을 적용한 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def solution(numbers):
answer = []
for i in range(len(numbers)):
num = numbers[i]
cnt = 0
while 1:
if (num & 1 <<cnt) ==0 :
break
cnt+=1
if cnt != 0 :
num = num + ((1<<cnt)) - (1<<(cnt-1))
#끝자리가 0인 경우 1만 더하면 된다.
else :
num += 1
answer.append(num)
return answer
5. 결과
필요시. c++ 짜드리겠습니다.
This post is licensed under CC BY 4.0 by the author.