728x90
https://programmers.co.kr/learn/courses/30/lessons/77885
접근
이런 문제를 규칙을 잘 찾아야할 필요가 있다. 규칙은 다음과 같다.
짝수일 때는 맨 뒤에 있는 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 |