본문 바로가기

Algorithm/프로그래머스

[프로그래머스] Lv.2 2개 이하로 다른 비트

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

 

프로그래머스

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

programmers.co.kr

 

 

1. 해결방법

numbers를 for문 돌리서 

num이 짝수이면, +1만 해주면 된다.

num이 홀수이면, bin[2:]앞에 '0'을 추가하고 rfind() 메서드를 이용하여 0의 인덱스 위치를 구하고 0을 1로 갱신해준다.
그리고 0의 위치에서 +1에 위치한 인덱스 값을 0으로 바꿔준다

 

 

2. 정답코드

def solution(numbers):
    answer = []
    
    for num in numbers:
        if num % 2 == 0:
            # 짝수
            new_num = int(bin(num)[2:]) + 1
            answer.append(int('0b' + str(new_num), 2))
        else:
            # 홀수
            new_num = '0' + str(int(bin(num)[2:]))
            idx = new_num.rfind('0')
            new_num = list(new_num)
            new_num[idx], new_num[idx + 1] = '1', '0'
            answer.append(int('0b' + ''.join(new_num), 2))
            
            
    return answer
본인 기준에선 어려웠다.
로직 자체는 이해가지만 홀수일 때, 뇌사가 와서 해결하지 못했던 문제이다.

rfind() 메서드를 알게되었고, 자연스레 find() 메서드도 이해를 할 수 있었던 문제이다.