개발/algorithm

[프로그래머스][level2] 2개 이하로 다른 비트 - python

zzi_on2 2022. 4. 27. 19:16

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/77885

 

코딩테스트 연습 - 2개 이하로 다른 비트

 

programmers.co.kr

 

풀이 

- 짝수 일 때는 이진수로 바꾸었을 때 맨 뒤 숫자가 무조건 0이므로 이를 1로 바꾸면 가장 최솟값 

- 홀수 일 때는 가장 뒤에 있는 0을 1로 바꾸고 그 뒤 숫자를 0으로 바꾸면 가장 최솟값 

def solution(numbers):
    answer = []
   
    for i in numbers:
        # 짝수일 땐 맨 뒤를 1로 바꿈, 즉 1 더하기 
        if i % 2 == 0:
            answer.append(i+1)
        else :
            # 모두 1로 구성되어있을 때를 위해 제일 앞에 0 추가 
            b_num = ['0']
            # 이진수 변환 
            b_num.extend(list(map(str,bin(i)[2:])))
            
             # 뒤에서부터 0 만나면 1로 바꾸고 그 뒤에 숫자 0으로 바꾸기 
            for i in range(len(b_num)-1, -1, -1):
                if b_num[i] == '0':
                    b_num[i] = '1' 
                    b_num[i+1] = '0'
                    b_num = '0b' + "".join(b_num)
                    # 10진수 변환 
                    b_num = int(b_num, 2)
                    
                    answer.append(b_num)
                    break
                            
    return answer