프로그래머스/lv.2
2개 이하로 다른 비트
bingual
2024. 2. 26. 18:08
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/77885
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제풀이
- num ^ (num + 1)에서 x ^ y는 XOR 연산자로 이진수로 변환한 x와 y에 대해 둘의 비트 지점이 같을 경우 0을 다를 경우 1를 반환하고 그 결과를 십진수로 변환하여 반환한다. 7 ^ 8이라고 한다면 0111 ^ 1000 = 1111이 되며 이를 십진수로 변환하면 15가 된다.
- (num ^ (num + 1)) >> 2에서 x >> y는 시프트 연산자로 각 비트를 오른쪽으로 이동 시킨다. 이동된 비트의 자리는 0으로 대체된다. 따라서 1111 >> 2 = 0011이 되며 이를 십진수로 변환하면 3이 된다. 즉 x >> y는 x // (2**y)와 같다.
- 마지막으로 위에 결과에 대해 num + 1을 해주게 된다면 7이 입력으로 주어졌을 때 15 // 4 + 7 + 1 = 11을 2가 입력으로 주어졌을 때 1 // 4 + 2 + 1 = 3이 된다.
def solution(numbers):
return [((num ^ (num + 1)) >> 2) + num + 1 for num in numbers]