프로그래머스/Lv.2
월간 코드 챌린지 시즌2 > 2개 이하로 다른 비트 - Python, bin, rfind
아찌방
2025. 5. 5. 00:56
https://school.programmers.co.kr/learn/courses/30/lessons/77885
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
코드 & 풀이
def solution(numbers):
answer = []
for num in numbers:
if num % 2 == 0:
answer.append(num + 1)
else:
num_bit = bin(num)[2:]
idx = num_bit.rfind('0')
if idx == -1:
find_num = '10' + num_bit[1:]
else:
find_num = num_bit[:idx] + '10' + num_bit[idx + 2:]
answer.append(int(find_num, 2))
return answer
num이 짝수이면 무조건 + 1한 값이 정답
ex)
if num = 2 (10), answer = 3(11)
if num = 4 (100), answer = 5(101)
num이 홀수이면
- 1로만 이루어져 있는 경우 ’10’을 먼저 쓴 후 나머지를 1로 채워줌
ex)
if num = 3 (11), answer = 5 (101)
if num = 7 (111), answer = 11 (1011) - 아닌 경우 (중요)
가장 오른쪽에 있는 0의 위치를 찾아서 1로, 그 오른쪽 1은 0으로 바꾸는 게 가장 좋음
ex)
num = 11 (1011)일때 가장 좋은 경우는 13 (1101)임
이렇게 만들기 위해
‘1’ ( [:0 - idx (1)] ) + ‘10’ + '1'( [idx (1) + 2:] )= ‘1101’
처음에는 숫자를 올려가면서 비트 수를 or 연산 후 1의 개수를 count 했는데
이런 방식이 있었음.
728x90