반응형
https://programmers.co.kr/learn/courses/30/lessons/77885
코딩테스트 연습 - 2개 이하로 다른 비트
programmers.co.kr
해결 방법 : 이진 변환, 수학
- $2^0$의 자리 수가 0인 경우 : number + 1
- 그 외 : $2^x$의 자리수까지 1이 연속된다면, number + $2^x$
- ex. number : 1110101111, x = 3
def solution(numbers):
answer = []
for n in numbers:
asBin = bin(n)[2:]
zero_loc = asBin.rfind('0') # 오른쪽부터 첫번째 0 주소값
if asBin[-1] == '0': # 2^0 자리가 0이면, n+1이 정답
answer.append(n + 1)
else: # 오른쪽부터) 연속된 1의 마지막 자리 x에 대해, 2^x를 더해줌, ex. if n == 10110111: 2^x = 100
answer.append(n + (1 << (len(asBin) - zero_loc - 2))) # = n + 2^(len(asBin) - zero_loc - 2)
return answer
반응형
'IT study > 알고리즘 문제 풀이' 카테고리의 다른 글
프로그래머스 : 섬 연결하기 (0) | 2021.06.24 |
---|---|
프로그래머스 : 기지국 설치 (0) | 2021.06.22 |
프로그래머스 : 쿼드압축 후 개수 세기 (0) | 2021.06.21 |
프로그래머스 : 배달 (0) | 2021.06.21 |
백준 2800 : 괄호 제거 (0) | 2021.06.19 |