프로그래머스 2개 이하로 다른 비트

맹민재·2023년 4월 8일
0

알고리즘

목록 보기
50/134
def solution(numbers):
    answer = []
    for number in numbers:
        bit = str(bin(number))[2:]
        zero = len(bit)-bit.rfind('0')-1 if bit.rfind('0') != -1 else len(bit) 
        if zero <= 1:
            answer.append(number + 1)
        else:
            tmp = '1' + '0'* (zero - 1)
            answer.append(number + int(tmp, 2))
        
    return answer

특별히 사용한 알고리즘은 없고 bit의 규칙을 찾아서 해결한 문제

처음에 0의 뒤에서 부터의 위치를 찾는다. 만약 0이 없다면 bit로 변환한 수 앞에 0이 있다고 생각한다.

만약 111 이라면 0111로 0의 위치는 3으로 생각하고
10 이라면 0의 위치는 0으로 생각한다.

0의 위치가 뒤에서 부터 0, 1 인덱스에 위치한다면 그 숫자에 1만 더해도 1개 이상 다르기 때문에 그 값이 정답이다

그렇치 않은 경우에는 현재 0의 뒤에서 부터의 위치를 1로 바꾸고 그 다음 인덱스를 0으로 바꾸면된다
tmp = '1' + '0'* (zero - 1) 이 식을 통해 해당 과정 수행
뒤로부터 처음 위치의 0의 인덱스 자리 전 자리에 1을 더해주는 방식이다.

profile
ㄱH ㅂrㄹ ㅈr

0개의 댓글