-
코딩테스트 연습 - 2개 이하로 다른 비트
programmers.co.kr
문제 설명
양의 정수 x에 대한 함수 f(x)를 다음과 같이 정의합니다.
- x보다 크고 x와 비트가 1~2개 다른 수들 중에서 제일 작은 수
예를 들어,
- f(2) = 3 입니다. 다음 표와 같이 2보다 큰 수들 중에서 비트가 다른 지점이 2개 이하이면서 제일 작은 수가 3이기 때문입니다.
2 000...0010 3 000...0011 1 - f(7) = 11 입니다. 다음 표와 같이 7보다 큰 수들 중에서 비트가 다른 지점이 2개 이하이면서 제일 작은 수가 11이기 때문입니다.
7 000...0111 8 000...1000 4 9 000...1001 3 10 000...1010 3 11 000...1011 2 정수들이 담긴 배열 numbers가 매개변수로 주어집니다. numbers의 모든 수들에 대하여 각 수의 f 값을 배열에 차례대로 담아 return 하도록 solution 함수를 완성해주세요.
제한사항- 1 ≤ numbers의 길이 ≤ 100,000
- 0 ≤ numbers의 모든 수 ≤ 1015
입출력 예numbersresult[2,7] [3,11] 코드
def solution(numbers): answer = [] for num in numbers: if num % 2 == 0 or num == 1: answer.append(num + 1) continue num_bit = format(num,'b') if num_bit[-1:-3] == "01": answer.append(num+1) continue one_cnt = 0 for i in range(len(num_bit)-1,-1,-1): if num_bit[i] == "1": one_cnt += 1 else: break temp = num+2**(one_cnt-1) answer.append(temp) return answer
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 영어 끝말잇기 (파이썬) (0) 2022.01.09 [프로그래머스] 삼각 달팽이 (파이썬) (0) 2022.01.09 [프로그래머스] 프렌즈4블록 (파이썬) (0) 2022.01.09 [프로그래머스] 큰 수 만들기 (파이썬) (0) 2022.01.09 [프로그래머스] 카펫 (파이썬) (0) 2022.01.08