728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/77885
문제 설명
양의 정수 x에 대한 함수 f(x)를 다음과 같이 정의합니다.
- x보다 크고 x와 비트가 1~2개 다른 수들 중에서 제일 작은 수
예를 들어,
- f(2) = 3 입니다. 다음 표와 같이 2보다 큰 수들 중에서 비트가 다른 지점이 2개 이하이면서 제일 작은 수가 3이기 때문입니다.
- f(7) = 11 입니다. 다음 표와 같이 7보다 큰 수들 중에서 비트가 다른 지점이 2개 이하이면서 제일 작은 수가 11이기 때문입니다.
정수들이 담긴 배열 numbers가 매개변수로 주어집니다. numbers의 모든 수들에 대하여 각 수의 f 값을 배열에 차례대로 담아 return 하도록 solution 함수를 완성해주세요.
풀이
Code
# 1. 최솟값 반환 함수 정의
def return_min(num) :
# 1-1. 짝수인 경우
if num % 2 == 0 :
# 1을 더한 값 리턴
return num + 1
# 1-2. 홀수인 경우
else :
# 이진 비트로 변환
bit = list('0' + bin(num)[2:])
for i in range(len(bit)-1, -1, -1) :
# '0'값을 가지는 인덱스 찾기
if bit[i] == '0' :
index = i
break
# 값 변환
bit[index], bit[index+1] = '1', '0'
# 10진수로 변환한 값 리턴
return int(''.join(bit), 2)
def solution(numbers):
# 2. 결과 리스트 리턴
return [return_min(num) for num in numbers]
728x90
반응형
'Coding Test > Programmers' 카테고리의 다른 글
[Python/Programmers] 최고의 집합 (0) | 2023.08.27 |
---|---|
[Python/Programmers] 야근 지수 (0) | 2023.08.27 |
[Python/Programmers] 삼각 달팽이 (0) | 2023.08.27 |
[Python/Programmers] 2 x n 타일링 (0) | 2023.08.26 |
[Python/Programmers] 숫자 변환하기 (0) | 2023.08.26 |