알고리즘 풀이/프로그래머스

[Level 2] 2개 이하로 다른 비트

mhko411 2021. 9. 27. 22:40
728x90

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

 

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

 

programmers.co.kr


접근

이런 문제를 규칙을 잘 찾아야할 필요가 있다. 규칙은 다음과 같다.

짝수일 때는 맨 뒤에 있는 0을 1로 변경한다. 

홀수일 때는 맨 뒤에 있는 0을 1로 변경하고 그 다음을 0으로 변경한다.

이를 통해 해를 구할 수 있다.

 

구현

- 7을 bin으로 변경하면 0b111이 되어 0을 찾을 수 없다. 따라서 이러한 경우를 대비하여 미리 앞에 0을 추가한다.

- 이어서 문자열로 변경하고 rfind()를 사용하여 '0'의 위치를 idx에 넣는다.

- 이후 number가 홀수일 때는 idx+1을 0으로 변경한다.

- 위의 과정이 모두 끝난 뒤에는 지금까지 만들어진 문자열을 10진수로 변경하여 answer에 추가한다.

def solution(numbers):
    answer = []
    for number in numbers:
        bits = list('0' + bin(number)[2:])
        idx = ''.join(bits).rfind('0')
        bits[idx] = '1'
        
        if number % 2:
            bits[idx + 1] = '0'
        answer.append(int(''.join(bits), 2))
    return answer

'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글

[Level 2] 배달  (0) 2021.11.08
[Level 2] 행렬의 곱셈  (0) 2021.09.27
[Level 2] 압축  (0) 2021.09.23
[Level 2] 쿼드압축 후 개수 세기  (0) 2021.09.15
[Level 2] n진수 게임  (0) 2021.09.13