본문 바로가기
프로그래머스/2단계

(Python/LV2) 2개 이하로 다른 비트

by windy7271 2022. 10. 4.
728x90
반응형

문제출처: https://school.programmers.co.kr/learn/courses/30/lessons/77885

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이:

def solution(numbers):
    res = []
    for number in numbers:
        number = int(number)
        if number % 2 == 0:
            res.append(number+1)
        else:
            now = '0' + bin(number)[2:]
            index = now.rfind("0")
            now_list = list(now)
            now_list[index] = "1"
            now_list[index+1] = "0"
            res.append(int("".join(now_list),2))
    return res

7인 경우 2진법으로 111 인데 

0111으로 해서 하면 1011이 가장 작은 수이므로

앞에 0을 추가해줘서 계산하는게 좋음

 

def solution(numbers):
    answer = []
    for idx, val in enumerate(numbers):
        answer.append(((val ^ (val+1)) >> 2) +val +1)

    return answer
# 이제는 그러려니함

^ 는 xor 연산자 

둘 중 하나만 참일 때 만족

반응형

댓글