관리 메뉴

솜씨좋은장씨

[Programmers] 2개 이하로 다른 비트 (Python) 본문

Programming/코딩 1일 1문제

[Programmers] 2개 이하로 다른 비트 (Python)

솜씨좋은장씨 2021. 6. 7. 19:30
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 프로그래머스의 2개 이하로 다른 비트 입니다.

 

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

 

programmers.co.kr

Solution

def solution(numbers):
    answer = []
    
    for number in numbers:
        if number % 2 == 0:
            binary_num = list(bin(number)[2:])
            binary_num[-1] = "1"
        else:
            binary_num = bin(number)[2:]
            binary_num = "0" + binary_num
            one_idx = binary_num.rfind("0")
            binary_num = list(binary_num)
            binary_num[one_idx] = "1"
            binary_num[one_idx + 1] = "0"
            
        ans_num = int("".join(binary_num), 2)
        answer.append(ans_num)
    
    return answer

Solution 풀이

짝수일 경우에는 2진수의 맨 마지막 위치에 1을 넣어주면 끝!

만약 2일 경우 bin을 활용해 2진수로 바꾸어주면 10 여기서 맨 마지막을 1로 바꾸어주면 11

다시 int를 활용해 10진수로 바꾸어주면 3이 됩니다.

 

홀수일 경우에는 bin을 활용해 2진수로 바꾸어줍니다.

만약 7일 경우 2진수로 바꾸어주면 111로 1만 존재하므로 맨 앞에 0을 하나 붙여줍니다. -> 0111

그 다음 맨 오른쪽 부터 rfind를 활용하여 0을 찾고 그 위치에 1을 넣어줍니다. -> 1111

그 다음 1을 넣은 위치 오른쪽에 0을 넣어줍니다. 그럼 1011로 이를 int를 통해 10진수로 바꾸어주면 11이 됩니다.

 

SOMJANG/CODINGTEST_PRACTICE

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments