ror_coding

[Programmers] 2개 이하로 다른 비트 - 77885 본문

Algorithm/Python

[Programmers] 2개 이하로 다른 비트 - 77885

ro_rdil_31 2024. 12. 11. 15:01
728x90

shift와 XOR 문제.. 짝수일 때는 binary 값의 맨 우측이 0이라서 +1만 하면 되지만 홀수일 때 여러 bin 값이 바뀌기 때문에 이를 고려해야 한다.

 

Question

 

정수들이 담긴 배열 numbers가 매개변수로 주어집니다. numbers의 모든 수들에 대하여 각 수의 f 값을 배열에 차례대로 담아 return 하도록 solution 함수를 완성해주세요.

 

Point
  • 서로 다른 지점이 2개 이하여야 함.
  • 따라서 num ^ (num+1) 해준 값을 right shift 2칸 해줌.
  • (만약 서로 다른 지점이 1개라면 right shift 1칸 해줌)
 왜 `num`과 `num + 1`을 비교하는가?

`num + 1`은 `num`보다 큰 가장 작은 숫자임.
이를 비교하면, 비트를 최소한으로 변경하면서 크기를 증가시키는 최적의 위치를 파악할 수 있습니다.
즉, `num ^ (num + 1)`은 필요한 비트 변화의 최소 위치를 알려주는 계산 방법.

 

Code

 

def solution(numbers):
    return [((num ^ (num+1)) >> 2) + num + 1 for num in numbers]

 

now me

On my github

 

728x90

'Algorithm > Python' 카테고리의 다른 글

[Programmers] 소수 찾기 - 42839  (0) 2024.12.12
[Programmers] 가장 큰 수 - 42746  (0) 2024.12.11
[Programmers] 2 x n 타일링 - 12900  (0) 2024.12.11
[Programmers] 더 맵게 - 42626  (0) 2024.12.08
[Python] Heap (Priority Queue)  (1) 2024.12.08