<aside>
💬 lv0
, 비트 조작
정수 배열이 주어집니다. 배열 내 모든 요소에 대한 비트 AND 연산의 결과와 비트 OR 연산의 결과를 각각 반환하는 코드를 작성해주세요.
입력 (배열) | 출력 (비트 AND 결과, 비트 OR 결과) |
---|---|
[12, 5, 6] | (4, 13) |
[7, 14, 3] | (0, 15) |
첫 번째 예시에서 배열 [12, 5, 6]의 비트 AND 연산 결과는 4이고, 비트 OR 연산 결과는 13입니다. 두 번째 예시에서 배열 [7, 14, 3]의 비트 AND 연산 결과는 0이고, 비트 OR 연산 결과는 15입니다.
</aside>
def solution(nums):
if not nums: **#1 예외처리**
return (0, 0)
bit_and = nums[0] **#2 변수명 생성**
bit_or = nums[0]
for num in nums[1:]: **#3 반복문**
bit_and &= num
bit_or |= num
return (bit_and, bit_or) **#4 결과 반환**
예외처리
주어진 nums
가 비어 있다면 (0,0)
을 반환하는 예외처리를 작성해줍니다.
변수명 생성
주어진 nums
의 첫 번째 숫자를 각각 변수명으로 지정해줍니다.
반복문
주어진 nums
의 첫 번째 숫자를 제외한 나머지 숫자들에 대해 비트 AND연산
과 비트 OR연산
을 수행합니다.
결과 반환
연산이 끝난 값들을 튜플로 묶어 반환합니다.
비트 조작 연산자
기본 형태: &
, |,
^
, ~
, <<
, >>
개념: 비트 조작 연산자를 사용하면 정수의 이진수 표현을 조작할 수 있습니다.
# AND 연산
result_and = 0b1010 & 0b1100
print(bin(result_and)) # 출력: '0b1000'
# OR 연산
result_or = 0b1010 | 0b1100
print(bin(result_or)) # 출력: '0b1110'
# XOR 연산
result_xor = 0b1010 ^ 0b1100
print(bin(result_xor)) # 출력: '0b0110'
# NOT 연산
result_not = ~0b1010
print(bin(result_not)) # 출력: '-0b1011'
# 왼쪽 시프트
result_left_shift = 0b1010 << 2
print(bin(result_left_shift)) # 출력: '0b101000'
# 오른쪽 시프트
result_right_shift = 0b1010 >> 2
print(bin(result_right_shift)) # 출력: '0b10'
import functools, operator **#1 모듈 선언**
def solution(data):
and_ = functools.reduce(operator.and_, data) **#2 함수 사용**
or_ = functools.reduce(operator.or_, data)
return (and_, or_) **#3 결과 반환**
모듈 선언
functools.reduce
함수와 operator.and_
, operator.or_
함수를 사용합니다.
함수 사용
functools.reduce
함수는 리스트 내의 요소들에 대해 지정된 함수를 반복적으로 적용하여 하나의 값으로 축소합니다. operator.and_
함수는 비트 AND 연산
을 수행하고, operator.or_
함수는 비트 OR 연산
을 수행합니다.
결과 반환
연산이 끝난 값들을 튜플
로 묶어 반환합니다.