코딩테스트/기출
[월간 코드 챌린지 시즌2 / 프로그래머스] 77885번 : 2개 이하로 다른 비트
ydin
2022. 10. 5. 17:48
- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/77885
Lv2 문제이다!
처음엔 dp나 어떤 규칙이 있어야 풀릴 것 같아서 찾다가 안돼서 결국 풀이 찾아본 문제이다
생각보다 규칙은 간단했다
숫자가 짝수라면 오른쪽 끝이 무조건 0이므로 이를 1로 바꿔주면 된다.
숫자가 홀수라면 가장 오른쪽에 있는 0을 1로 바꿔주고, 그 오른쪽에 있는 값을 0으로 바꿔준다(01 -> 10) 이렇게 하면 더 큰 수로 비트 두 개를 변경할 수 있다.
연산을 마친 2진수 숫자는 10진수 숫자로 변경한 다음 answer에 추가해준다
- 정답 풀이 :
def solution(numbers):
answer = []
for number in numbers:
bin_number = list('0' + bin(number)[2 : ])
index = ''.join(bin_number).rfind('0') #가장 오른쪽에 있는 0의 인덱스
bin_number[index] = '1'
if number % 2 == 1:
bin_number[index + 1] = '0'
#2진수를 10진수로 변환해서 추가
answer.append(int(''.join(bin_number), 2))
return answer