
프로그래머스 LV1 짝수와 홀수(연습)
프로그래머스 lv1 짝수와 홀수(연습)
문제 설명
정수 num이 짝수일 경우 “Even”을 반환하고
홀수인 경우 “Odd”를 반환하는 함수, solution을 완성해주세요.
제한 조건
- num은 int 범위의 정수입니다.
0은 짝수입니다.
입출력 예
num | return |
---|---|
3 | “Odd” |
4 | “Even” |
이진 비트
비트논리 연산자 사용하기
- AND, OR, XOR, NOT 연산을 하는 비트 논리 연산자
- & 비트 AND
- | 비트 OR
- ^ 비트 XOR
- ~ 비트 NOT
비트 논리 연산자는 각 자릿수를 연산하여 결과를 만든다.
이때 각 자릿수의 연산결과는 영향을 받지 않는다.
---------------------------------------------
#AND 연산자
1 1 0 1 (13)
1 0 0 1 (9)
13 & 9
>>> 1 0 0 1 (9)
---------------------------------------------
둘다 1인 자릿릿수만 1, 나머지는 0이다.
---------------------------------------------
# OR 연산자
1 1 0 1 (13)
1 0 0 1 (9)
13 | 9
>>> 1 1 0 1 (13)
---------------------------------------------
둘 중 하나라도 1이면 1이다.
---------------------------------------------
# XOR 연산자
1 1 0 1 (13)
1 0 0 1 (9)
13 ^ 9
>>> '0100', 즉 bin(13^9) = '0b100'
>>> 4
---------------------------------------------
둘 중 하나라도 1이면 1, 둘다 1이면 0
---------------------------------------------
# NOT 연산자
1 1 0 1 (13)
~13
>>> bin(~13) = '-0b1110' # The bitwise inversion of x is defined as -(x+1)
>> -(0b1101)+1
>> (-0b1110)
---------------------------------------------
The bitwise inversion of x is defined as -(x+1)
풀이
# 내 풀이
def solution(num):
return "Even" if num % 2 == 0 else "Odd"
solution(1)
% 2 == 0
2로 나눈 나머지가 0이면"Even"
, 아니면"Odd"
# 다른 사람 풀이. 이진 비트 활용
def evenOrOdd(num):
return ["Even", "Odd"][num & 1]
#아래는 테스트로 출력해 보기 위한 코드입니다.
print("결과 : " + evenOrOdd(3))
# print("결과 : " + evenOrOdd(2))
1의 이진비트는
bin(1) = '0b1'
이다.
num이 홀수면 이진수로 바꿨을때 첫째 자릿수는 홀수 이고 짝수이면 짝수이다.
예:bin(3) = '0b11'
예를 들어 3 & 1 을 &, 즉 and 비트 연산을 해보면
3의 이진수 첫째자리는 1이고 1의 첫째자리도 1이다. and 연산의 결과는 1이다.
비트 연산자는 왼쪽으로는 0이 무한으로 있는거나 다름 없으므로
&
연산을 한 경우 첫째 자리를 제외한 나머지 자리는 전부 0이 된다.
즉 num & 1로 비트연산을 하게 되면 num이 짝수면 0, 홀수면 1을 리턴하게 된다.
예:bin(14 & 1) = '0b0'
,0b0 = 0
0이면 홀수 이므로 “Even”, 1이면 짝수이므로 “Odd”를 인덱싱하여 리턴한다.
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges